Eu usei "puxão de merda" 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 ficheiro é boa e que a minha é má, por isso todas as minhas alterações devem ser abandonadas. Como posso fazer isso?
Como o seu pull
não foi bem sucedido então o HEAD
(não o HEAD^
) é o último compromisso "válido" na sua filial:
git reset --hard HEAD
A outra peça que você quer é deixar que as mudanças deles substituam as suas mudanças.
Versões mais antigas do git permitiam que você usasse a estratégia de fusão "deles":
git pull --strategy=theirs remote_branch
Mas isto já foi removido, como explicado em esta mensagem de Junio Hamano (o mantenedor do Git). Como observado em o link, ao invés disso você faria isso:
git fetch origin
git reset --hard origin
Acho que é "reiniciar" que você precisa.
Cuidado que git revert
significa algo muito diferente de, digamos, svn revert
- no Subversion a reversão irá descartar suas alterações (não comprometidas), retornando o arquivo para a versão atual do repositório, enquanto git revert
"desfaz" um commit.
O git reset
deve fazer o equivalente a svn revert
, ou seja, descartar suas alterações indesejadas.
Neste caso de uso particular, você não quer realmente abortar a fusão, apenas resolver o conflito de uma determinada maneira.
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 mudanças dos outros lados é apenas para este arquivo.
Para um arquivo não fundido em um git de conflito torna disponível a base comum, versões locais e remotas do arquivo no índice. (É daqui que eles são lidos para uso em uma ferramenta de comparação de 3 vias por git mergetool
.) Você pode utilizar 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 simples de resolver o conflito para usar a versão remota literalmente é:
git show :3:_widget.html.erb >_widget.html.erb
git add _widget.html.erb
Ou, com o git >= 1.6.1:
git checkout --theirs _widget.html.erb