Como alterar um commit feito no Git que esta no meio da árvore?


( comecei a escrever esse post em 02 de setembro 2008; mas só agora publicando, antes tarde do que nunca =P )

Como alterar um commit feito no Git que esta no meio da árvore?
Fiz essa pergunta pro kov na mesma época que comecei a escrever e essa foi a resposta dele na época:

Primeiro é preciso criar uma tag para identificar o commit que você quer editar.
Nesse exemplo, estou editando o commit ‘a9851296d5eb52161fcb151d58f4aaee3f9ce416‘ e criando a tag ‘bad

git tag bad a9851296d5eb52161fcb151d58f4aaee3f9ce416

Colocar o commit no topo

git checkout bad
Agora é fazer as modificações nescessárias...

Adicionar os arquivos editados no HEAD

git add 'arquivos alterados'

Refazer o commit

git commit --amend

Reconstruir o histórico

git rebase --onto HEAD bad master

git checkout master

Recentemente ele me mostrou outras maneiras mais elegantes. Mas fica pra quem quiser deixar nos comentários =D

Previous

Encontro Mineiro de Software Livre 2008

Next

é obra derivada?

2 Comments

  1. O “jeito mais elegante” é usar git rebase -i HEAD~#, onde # é o número de commits que você quer editar (ou até o que você quer editar). Depois que você roda isso, o git abre seu editor com uma coisa mais ou menos assim:
    pick fca9692 Only export symbols that should be public
    pick 9e4db3a autoreconf run
    pick 73bbfc1 Refactor GksuController creation
    O mais de baixo é o mais novo. Aí você troca ‘pick’ ali por ‘edit’ ou ‘squash’, ou deixa ‘pick’ mesmo. O edit faz o git ir pro commit que você quer editar. Aí você pode editar ele do jeito que quiser, fazer mais commits que vão ficar depois dele e antes do próximo. Aí quando tiver terminado faz git rebase –continue. O squash é massa, também. Ele pega o commit que c marcou com squash e junta com o anterior.

  2. best online slots

    best online slots

Deixe um Comentário sobre Gustavo Noronha Silva Cancelar resposta

O seu endereço de email não será publicado Campos obrigatórios são marcados *

Powered by WordPress & Theme by Anders Norén