Eu estou enfrentando um conflito de mesclagem. Como posso interromper a fusão?

Eu usei git pull e tive um conflito de mesclagem:

 unmerged: _widget.html.erb You are in the middle of a conflicted merge. 

Eu sei que a outra versão do arquivo é boa e meu xadrez, então todas as minhas alterações devem ser invertidas. Como posso fazer isso?

1947
19 сент. definir por Gwyn Morfey 19 de setembro 2008-09-19 16:21 '08 at 4:21 pm 2008-09-19 16:21
@ 10 respostas

Como sua pull foi malsucedida, HEAD (não HEAD^ ) é a última confirmação "válida" em seu segmento:

 git reset --hard HEAD 

A outra parte que você deseja é permitir que suas alterações excedam suas alterações.

Versões mais antigas do git permitiram que você usasse a estratégia de mesclagem "them":

 git pull --strategy=theirs remote_branch 

Mas, desde então, foi removido, como descrito neste post por Junio ​​Hamano (git acompanhante). Conforme indicado no link , você fará o seguinte:

 git fetch origin git reset --hard origin 
1752
19 сент. Resposta dada por Pat Notz em 19 Set 2008-09-19 17:33 '08 at 17:33 2008-09-19 17:33

Se sua versão do git for> 1.6.1, você pode usar git reset --merge .

Além disso, como o @Michael Johnson menciona, se sua versão do git for> 1.7.4, você também pode usar git merge --abort .

Como sempre, antes de iniciar uma mesclagem, verifique se você não tem alterações não confirmadas.

Na página man git merge

border=0

git merge --abort equivale a git reset --merge quando MERGE_HEAD presente.

MERGE_HEAD presente quando a mesclagem é executada.

Além disso, com relação a alterações não confirmadas ao iniciar uma mesclagem:

Se você tiver alterações que não deseja fazer antes de iniciar uma mesclagem, basta git stash las antes de mesclar e git stash pop após git stash pop conclusão da fusão ou o cancelamento.

1610
29 марта '10 в 2:16 2010-03-29 02:16 a resposta é dada por Carl em 29 de março de 2010 às 02:16 2010-03-29 02:16
 git merge --abort 

Anule o processo de resolução de conflitos em andamento e tente restaurar o estado de pré-mesclagem.

Se houver alterações não funcionais na situação de trabalho que estavam presentes quando a mesclagem começou, o git merge --abort em alguns casos não poderá recuperar essas alterações. Portanto, é recomendável que você sempre grave ou registre suas alterações antes de executar o git merge.

git merge --abort equivalente a git reset --merge quando MERGE_HEAD .

http://www.git-scm.com/docs/git-merge

382
13 нояб. resposta dada ignis 13 nov. 2012-11-13 00:40 '12 às 0:40 2012-11-13 00:40

Neste caso de uso específico, você realmente não quer quebrar a mescla, basta resolver o conflito de uma determinada maneira.

Não há necessidade especial de redefinir e mesclar com outra estratégia. Os conflitos foram alocados corretamente com o git, e o requisito para aceitar mudanças por terceiros é apenas para este arquivo.

Para um arquivo não relacionado em um conflito, o git fornece uma base compartilhada disponível, versões locais e remotas do arquivo no índice. (Aqui eles são lidos para uso na ferramenta de comparação de três direções com o git mergetool .) Você pode usar o git show para visualizá-los.

 # common base: git show :1:_widget.html.erb # 'ours' git show :2:_widget.html.erb # 'theirs' git show :3:_widget.html.erb 

A maneira mais fácil de resolver um conflito é usar a versão remota textualmente:

 git show :3:_widget.html.erb >_widget.html.erb git add _widget.html.erb 

Ou, com git> = 1.6.1:

 git checkout --theirs _widget.html.erb 
73
20 сент. Resposta dada por CB Bailey 20 set 2008-09-20 13:41 '08 at 1:41 pm 2008-09-20 13:41

Eu acho que você precisa git reset .

Cuidado que git revert significa algo muito diferente de, digamos, svn revert - no Subversion, um retorno irá descartar suas mudanças (não confirmadas), retornando o arquivo para a versão atual do repositório, enquanto o git revert "desfaz" o commit.

git reset deve fazer o equivalente ao svn revert , isto é, descartar mudanças indesejadas.

72
19 сент. Resposta dada por David Precious Set 19 2008-09-19 16:25 '08 at 4:25 pm 2008-09-19 16:25

Como os comentários assumem que git reset --merge é um pseudônimo para git merge --abort , vale a pena notar que git merge --abort equivalente a git reset --merge somente se um MERGE_HEAD . Isto pode ser encontrado na ajuda do git para o comando merge.

 git merge --abort is equivalent to git reset --merge when MERGE_HEAD is present. 

Após uma falha de mesclagem, quando não há MERGE_HEAD , a mesclagem com falha pode ser cancelada com git reset --merge , mas não necessariamente com git merge --abort , então eles não são apenas a sintaxe antiga e nova para a mesma coisa .

Pessoalmente, acho git reset --merge muito mais poderoso para cenários como o descrito, e fusões malsucedidas em geral.

29
02 апр. A resposta é dada por Martin 02 abr. 2015-04-02 15:16 '15 às 15:16 2015-04-02 15:16

Desde Git 1.6.1.3 git checkout capaz de verificar em ambos os lados da mesclagem:

 git checkout --theirs _widget.html.erb 
16
17 июля '10 в 4:29 2010-07-17 04:29 resposta foi dada a Alain O'Dea em 17 de julho '10 às 4:29 2010-07-17 04:29

Uma alternativa para preservar o estado de uma cópia de trabalho é:

 git stash git merge --abort git stash pop 

Eu geralmente aconselho contra isso, porque ele é tão efetivo quanto uma fusão no Subversion, porque elimina o relacionamento de ramificação no commit seguinte.

14
13 июля '10 в 21:57 2010-07-13 21:57 Resposta é dada por Alain O'Dea em 13 de julho '10 às 21:57 2010-07-13 21:57

E se você terminar o conflito de mesclagem e não tiver nada para confirmar, mas o erro de mesclagem é exibido depois que todos os comandos a seguir forem aplicados,

 git reset --hard HEAD git pull --strategy=theirs remote_branch git fetch origin git reset --hard origin 

remova

.git \ index.lock

arquivo [corte a pasta para outro local em caso de recuperação] e, em seguida, digite um dos seguintes comandos, dependendo da versão desejada.

 git reset --hard HEAD git reset --hard origin 

Espero que isso ajude !!!

9
11 апр. a resposta é dada por Nirav Mehta em 11 de abril 2018-04-11 00:26 '18 às 0:26 2018-04-11 00:26

Eu encontrei o que funcionou para mim (retornar um arquivo para o estado pré-mesclagem):

 git reset *currentBranchIntoWhichYouMerged* -- *fileToBeReset* 
1
31 окт. A resposta é dada por Malcolm Boekhoff em 31 de outubro. 2017-10-31 03:56 '17 às 3:56 2017-10-31 03:56