Narazil som na konflikt pri spájaní. Ako môžem prerušiť zlučovanie?

Použil som git pull a došlo ku konfliktu pri zlučovaní:

unmerged:   _widget.html.erb

You are in the middle of a conflicted merge.

Viem, že druhá verzia súboru je dobrá a že moja je zlá, takže všetky moje zmeny by mali byť zrušené. Ako to môžem urobiť?

Keďže vaše pull bolo neúspešné, potom HEAD (nie HEAD^) je posledná "platná" revízia vo vašej vetve:

git reset --hard HEAD

Druhá časť, ktorú chcete, je nechať ich zmeny prekrývať vaše zmeny.

Staršie verzie systému git umožňovali použiť stratégiu "ich" zlučovania:

git pull --strategy=theirs remote_branch

Táto možnosť však bola medzitým odstránená, ako je vysvetlené v tejto správe od Junio Hamano (správca systému Git). Ako je uvedené v odkaze, namiesto toho by ste mali urobiť toto:

git fetch origin
git reset --hard origin
Komentáre (11)

Myslím, že potrebujete git reset.

Dajte si pozor, že git revert znamená niečo úplne iné ako napríklad svn revert - v Subversion revert zruší vaše (nekomitované) zmeny a vráti súbor do aktuálnej verzie z úložiska, zatiaľ čo git revert "zruší" commit.

git reset by mal vykonať ekvivalent svn revert, t. j. zahodiť vaše nechcené zmeny.

Komentáre (0)

V tomto konkrétnom prípade použitia v skutočnosti nechcete prerušiť zlučovanie, len vyriešiť konflikt určitým spôsobom.

Nie je tiež potrebné vynulovať a vykonať zlúčenie s inou stratégiou. Konflikty boli správne zvýraznené systémom git a požiadavka akceptovať zmeny druhej strany sa týka len tohto jedného súboru.

Pre nezlúčený súbor v konflikte git sprístupňuje v indexe spoločnú základnú, lokálnu a vzdialenú verziu súboru. (Odtiaľ sa načítajú na použitie v nástroji na trojcestné porovnávanie pomocou nástroja git mergetool). Na ich zobrazenie môžete použiť git show.

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

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

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

Najjednoduchší spôsob riešenia konfliktu na doslovné použitie vzdialenej verzie je:

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

Alebo pomocou git >= 1.6.1:

git checkout --theirs _widget.html.erb
Komentáre (3)