Encontrei um conflito de fusão. Como posso abortar a fusão?

usei git pull e tive um conflito de fusão:

unmerged:   _widget.html.erb

You are in the middle of a conflicted merge.

Eu sei que a outra versão do arquivo é boa e que a minha é ruim para que todas as minhas alterações devem ser abandonadas. Como posso fazer isto?

Author: Rann Lifshitz, 2008-09-19

10 answers

Uma vez que o seu pull não foi bem sucedido então HEAD (não HEAD^) é o último commit" válido " no seu ramo:

git reset --hard HEAD
A outra peça que queres é deixar as suas mudanças ultrapassarem as tuas mudanças.

As versões mais antigas do git permitiram-lhe usar a estratégia de junção "deles":

git pull --strategy=theirs remote_branch

Mas isso já foi removido, como explicado em Esta mensagem por Junio Hamano (o mantenedor do Git). Como observado em o link , em vez disso você faria isto:

git fetch origin
git reset --hard origin
 1774
Author: Pat Notz, 2017-06-28 19:46:31

Se a sua versão git for > = 1.6. 1, pode utilizar git reset --merge.

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

Como sempre, certifique-se de que não tem alterações por persistir antes de iniciar uma junção.

Da página git merge man

git merge --abort é equivalente a git reset --merge quando MERGE_HEAD está presente.

MERGE_HEAD está presente quando uma fusão está em andamento.

Também em relação às alterações por persistir ao iniciar uma reunir:

Se tiver alterações que não queira enviar Antes de iniciar uma junção, apenas git stash antes da junção e git stash pop depois de terminar a junção ou de a interromper.

 1628
Author: Carl, 2016-01-19 23:31:48
git merge --abort

Interromper o processo de resolução de conflitos actual, e tentar reconstruir o estado pré-fusão.

Se existirem alterações por persistir na árvore de tarefas quando a junção iniciado, git merge --abort em alguns casos será incapaz de reconstruir estas mudanças. Assim, recomenda-se que seja sempre persistir ou esconder as suas alterações antes de executar a junção do git.

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

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

 391
Author: ignis, 2015-07-16 15:05:58

Neste caso específico de uso, você realmente não quer abortar a junção, apenas resolver o conflito de uma forma particular.

Também não há necessidade particular de reiniciar e realizar uma fusão com uma estratégia diferente. Os conflitos foram corretamente destacados pelo git e a exigência de aceitar as alterações dos outros lados é apenas para este arquivo.

Para um ficheiro não acumulado num Git de conflito, torna disponível a base comum, as versões locais e remotas do ficheiro no indice. (Aqui é onde eles são lidos para uso em uma ferramenta de 3-way diff por git mergetool.) Pode usar git show para os ver.

# common base:
git show :1:_widget.html.erb

# 'ours'
git show :2:_widget.html.erb

# 'theirs'
git show :3:_widget.html.erb

A forma mais simples de resolver o conflito para usar a versão remota é:

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
Author: CB Bailey, 2010-03-25 11:54:09
Acho que precisas.

Cuidado que git revert significa algo muito diferente de, digamos, svn revert - no Subversion, o reverter irá descartar as suas alterações( não atribuídas), devolvendo o ficheiro à versão actual do repositório, enquanto que git revert "anula" um commit.

git reset deve fazer o equivalente a svn revert, isto é, rejeitar as suas alterações indesejadas.

 72
Author: David Precious, 2011-05-30 15:47:21

Uma vez que os comentários sugerem que git reset --merge é um nome falso para git merge --abort, vale a pena notar que git merge --abort só é equivalente a git reset --merge Dado que um MERGE_HEAD está presente. Isto pode ser lido na ajuda do git para o comando de junção.

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

Depois de uma fusão falhada, quando não existe MERGE_HEAD, a junção falhada pode ser desfeita com git reset --merge mas não necessariamente com git merge --abort, Então eles não são apenas uma sintaxe antiga e nova para a mesma coisa.

Pessoalmente, acho muito mais poderoso para cenários. semelhante ao descrito, e falha funde-se em geral.
 29
Author: Martin G, 2015-04-02 12:16:45

Desde o início 1.6.1.3 git checkout foi capaz de obter de ambos os lados de uma junção:

git checkout --theirs _widget.html.erb
 16
Author: Alain O'Dea, 2014-07-23 17:45:31

Uma alternativa que preserve o estado da cópia de trabalho é:

git stash
git merge --abort
git stash pop
{[[2]} eu geralmente desaconselho isso, porque é efetivamente como mesclar no Subversion à medida que ele joga fora as relações de branch no seguinte commit.
 14
Author: Alain O'Dea, 2010-07-13 18:57:42

E se você acabar com o conflito da junção e não tiver nada para cometer, mas ainda assim o erro da junção está a ser mostrado depois de aplicar todos os comandos abaixo mencionados,

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

Por favor remova

.git\index.bloquear

Ficheiro [cortar colar para outro local em caso de recuperação] e depois introduzir qualquer um dos comandos abaixo, dependendo da versão que deseja.

git reset --hard HEAD
git reset --hard origin
Espero que isso ajude!!!
 12
Author: Nirav Mehta, 2018-04-27 18:31:27

Encontrei o seguinte a funcionar para mim (reverter um único ficheiro para o estado de pré-junção):

git reset *currentBranchIntoWhichYouMerged* -- *fileToBeReset*
 1
Author: Malcolm Boekhoff, 2017-10-31 00:56:24