Ik ben een samenvoeg conflict tegengekomen. Hoe kan ik de samenvoeging afbreken?

Ik gebruikte git pull en had een samenvoeg conflict:

unmerged:   _widget.html.erb

You are in the middle of a conflicted merge.

Ik weet dat de andere versie van het bestand goed is en dat de mijne slecht is, dus al mijn wijzigingen moeten worden losgelaten. Hoe kan ik dit doen?

Aangezien je pull niet succesvol was, is HEAD (niet HEAD^) de laatste "geldige" commit op je branch:

git reset --hard HEAD

Het andere stuk dat je wilt is om hun wijzigingen jouw wijzigingen te laten overschrijven.

Oudere versies van git stonden je toe om de "theirs" samenvoeg strategie te gebruiken:

git pull --strategy=theirs remote_branch

Maar dit is sindsdien verwijderd, zoals uitgelegd in dit bericht door Junio Hamano (de Git onderhouder). Zoals opgemerkt in de link, zou je in plaats daarvan dit doen:

git fetch origin
git reset --hard origin
Commentaren (11)

Ik denk dat je een 'git reset' nodig hebt.

Let op dat git revert iets heel anders betekent dan, laten we zeggen, svn revert - in Subversion zal de revert je (niet vastgelegde) wijzigingen ongedaan maken, en het bestand terugzetten naar de huidige versie van het archief, terwijl git revert "undoes" een commit ongedaan maakt.

git reset zou het equivalent van svn revert moeten doen, dat wil zeggen, het verwijderen van je ongewenste wijzigingen.

Commentaren (0)

In dit specifieke geval wil je de samenvoeging niet echt afbreken, maar alleen het conflict op een bepaalde manier oplossen.

Er is ook geen specifieke noodzaak om te resetten en een samenvoeging met een andere strategie uit te voeren. De conflicten zijn correct gemarkeerd door git en de eis om de wijzigingen van de andere kant te accepteren is alleen voor dit ene bestand.

Voor een unmerged bestand in een conflict maakt git de gemeenschappelijke basis, lokale en remote versies van het bestand beschikbaar in de index. (Dit is waar ze vandaan gelezen worden voor gebruik in een 3-weg diff tool door git mergetool). Je kunt git show gebruiken om ze te bekijken.

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

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

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

De eenvoudigste manier om het conflict op te lossen om de remote versie woordelijk te gebruiken is:

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

Of, met git >= 1.6.1:

git checkout --theirs _widget.html.erb
Commentaren (3)