Abortar um Git Merge

119

Estou trabalhando em um projeto usando Git como VCS. Eu tenho um ramo xyzcortado do ramo principal do master. Depois de trabalhar por um tempo, comprometi meu código e puxei a linha principal do branch.

A atração foi boa. Em seguida, mesclei o código com o mestre. Após a fusão, ocorreram problemas em alguns arquivos. Não comprometi o código após a fusão. Alguém pode me orientar sobre como posso abortar essa mesclagem e trazer meu branch onde estou trabalhando atualmente para o estado em que estava antes de eu fundi-lo?

Salman Kazmi
fonte
Você não pode simplesmente restaurar o commit anterior do branch?
Wutipong Wongsakuldej
2
Possível duplicata de How to undo a git merge with conflitos
Scott Weldon
1
Note que no Git, reverté o nome de um comando que cria um novo commit revertendo as mudanças em um commit anterior, então essa provavelmente não é a palavra que você está procurando aqui. Eu editei sua pergunta para esclarecer.
Scott Weldon

Respostas:

298

contanto que você não se comprometeu você pode digitar

git merge --abort

assim como a linha de comando sugeriu.

Timothy Truckle
fonte
4
Recebi esta mensagem ao tentar isso: error: Entry 'MyFile.java' not uptodate. Cannot merge. fatal: Could not reset index file to revision 'HEAD'.
SMBiggs
1
@Ahmad git não inicia uma fusão com mudanças não confirmadas (de arquivos já rastreados) no local. git não pode proteger o que ele não conhece.
Timothy Truckle
sim, você aprendeu perdendo meu código. aqui está um detalhe do meu problema, como eu caí no problema. stackoverflow.com/questions/55474092/how-to-undo-the-git-abort
Ahmad
23

Se você fizer "git status" enquanto tiver um conflito de mesclagem, a primeira coisa que o git mostra é como abortar a mesclagem.

saída do status git enquanto há um conflito de mesclagem

MLY
fonte
Legal, isso me sugeriu git reset HEAD <file>que efetivamente removeu o "merge" recolhível do controle de origem da extensão git => então eu poderia resolver os conflitos ou apenas reverter minhas alterações na lista de extensões GIT :)
jave.web
6

Verdade seja dita, existem muitos, muitos recursos que explicam como fazer isso já disponíveis na web:

Git: como fazer a mesclagem reversa de um commit?

Git: como fazer a mesclagem reversa de um commit?

Desfazendo Merges , do blog do Git (recuperado da Wayback Machine do archive.org)

Então, acho que vou apenas resumir alguns deles:

  1. git revert <merge commit hash>
    Isso cria um commit extra de "reversão" dizendo que você desfez uma fusão

  2. git reset --hard <commit hash *before* the merge>
    Este histórico redefiniu para antes de você fazer a fusão. Se você tiver commits após a fusão, você precisará cherry-pickdeles para depois.

Mas, honestamente, este guia aqui é melhor do que qualquer coisa que eu possa explicar, com diagramas! :)

denis.lobanov
fonte
1
O link sumiu. Suspiro.
SMBiggs de
@ScottBiggs Acho que mudaram para git-scm.com/book/en/v2/… . Denis, se você ler isso, pode verificar? E se for realmente o mesmo, você pode atualizar o link em sua resposta? Obrigado!
Fabio diz Restabelecer Monica em