Quando comecei a usar o git, fiz apenas um git init
e comecei a chamar add
e commit
. Agora estou começando a prestar atenção e posso ver que meus commits estão aparecendo como cowens@localmachine
, e não no endereço que eu quero. Parece que está definindo GIT_AUTHOR_EMAIL
e GIT_COMMITTER_EMAIL
fará o que eu quero, mas ainda tenho esses commit antigos com o endereço de e-mail / nome errado. Como posso corrigir as confirmações antigas?
76
git
para finalidades semelhantes a essa são mais solicitadas no Stack Overflow .Respostas:
Você pode voltar e corrigir todos os seus commit com uma única chamada para git filter-branch. Isso tem o mesmo efeito que o rebase, mas você só precisa executar um comando para corrigir todo o seu histórico, em vez de corrigir cada confirmação individualmente.
Você pode corrigir todos os emails errados com este comando:
Mais informações estão disponíveis nos documentos do git
fonte
if [ "$GIT_AUTHOR_EMAIL" = "$oldemail" ]; then GIT_AUTHOR_EMAIL="$newemail"; fi
O comando filter-branch do Git é poderoso, mas é terrivelmente difícil de usar para algo não trivial, como por exemplo, se você tiver mais de um autor para corrigir.
Aqui está uma alternativa que eu achei útil, que usa o recurso .mailmap descrito na página de manual do git-shortlog. Isso fornece um mecanismo de mapeamento de autor que podemos usar com o recurso de formatação do git log. Podemos usá-lo para gerar os comandos para escolher e alterar, alterar uma sequência nomeada de confirmações.
Por exemplo, suponha que você queira corrigir a autoria em uma filial $ BRANCH, iniciando em uma confirmação $ START.
Você precisa criar um arquivo .mailmap no diretório superior do seu repositório, que mapeia os nomes de autores existentes para os nomes corretos. Você pode obter uma lista dos nomes de autores existentes com:
Você precisa terminar com um arquivo .mailmap como este (digamos):
Agora você pode usar o recurso de formatação do git log para gerar os comandos para reescrever $ BRANCH como $ BRANCH2.
O primeiro comando cria uma nova ramificação vazia surgindo do commit $ START. Para cada confirmação entre $ START e o final de $ BRANCH, o segundo comando seleciona o commit original no final do ramo atual $ BRANCH2 e o altera para definir o autor corretamente.
Isso também é geralmente aplicável - coloque isso no seu ~ / .gitconfig:
Portanto, quando você precisar corrigir os autores, agora precisará gerar um arquivo .map e fazer:
A ref original da ramificação pode ser reatribuída para a nova e a nova excluída:
fonte
Combinando a resposta de Como faço para corrigir as metainformações no primeiro commit no git?
fonte
Para seguir a resposta de jedberg: Você pode usar
rebase -i
e optar por editar os commits em questão. Se você usargit commit --amend --author <AUTHOR DETAILS>
e, em seguida,git rebase continue
poderá percorrer e corrigir o histórico.fonte