it-swarm-eu.dev

Vběhl jsem do konfliktu sloučení. Jak mohu zrušit sloučení?

Použil jsem git pull a měl jsem konflikt sloučení:

unmerged:   _widget.html.erb

You are in the middle of a conflicted merge.

Vím, že druhá verze souboru je dobrá a že moje je špatná, takže všechny mé změny by měly být opuštěny. Jak to mohu udělat?

2199
Gwyn Morfey

Protože vaše pull bylo neúspěšné, pak HEAD (ne HEAD^) je poslední "platný" závazek ve vaší pobočce:

git reset --hard HEAD

Dalším kusem, který chcete, je nechat své změny přehnat vaše změny.

Starší verze programu git vám umožnily použít strategii sloučení „jejich“:

git pull --strategy=theirs remote_branch

Od té doby to však bylo odstraněno, jak je vysvětleno v této zprávě od Junio ​​Hamano (správce Git). Jak je uvedeno v odkaz , místo toho byste udělali toto:

git fetch Origin
git reset --hard Origin
1956
Pat Notz

Pokud je vaše verze git> = 1.6.1, můžete použít git reset --merge.

Stejně jako @ Michael Michael uvádí, pokud je vaše verze git> = 1.7.4, můžete také použít git merge --abort.

Jako vždy se ujistěte, že před zahájením slučování nemáte žádné nepotvrzené změny.

Ze stránky git merge man page

git merge --abort je ekvivalentní git reset --merge, když je přítomno MERGE_HEAD.

MERGE_HEAD je přítomen při probíhající korespondenci.

Pokud jde o nezávazné změny při spouštění sloučení:

Pokud máte změny, které nechcete spouštět před spuštěním sloučení, stačí je git stash před sloučením a git stash pop po dokončení sloučení nebo přerušení.

1766
Carl
git merge --abort

Ukončete současný proces řešení konfliktů a pokuste se rekonstruovat stav před sloučením.

Pokud se při spuštění slučování vyskytly nepotvrzené změny pracovní sady, git merge --abort v některých případech nebude schopen tyto změny rekonstruovat. Proto se doporučuje, abyste provedli nebo uložili změny před spuštěním git merge.

git merge --abort je ekvivalentní git reset --merge když je MERGE_HEAD přítomen.

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

440
ignis

Myslím, že potřebujete git reset.

Dbejte na to, že git revert znamená něco velmi odlišného, ​​řekněme, svn revert - v Subversion vrátí zpět (nezávazné) změny a vrátí soubor aktuální verzi z úložiště, zatímco git revert "vrátí" potvrzení.

git reset by měl udělat ekvivalent svn revert, tj. zrušit nechtěné změny.

83
David Precious

V tomto konkrétním případě použití opravdu nechcete přerušit sloučení, jen vyřešte konflikt konkrétním způsobem.

Neexistuje žádná zvláštní potřeba resetovat a provádět sloučení s jinou strategií. Konflikty byly správně zvýrazněny gitem a požadavek přijmout změny ostatních stran je pouze pro tento jeden soubor.

Pro unmerged soubor v konfliktu git zpřístupní společné základní, lokální a vzdálené verze souboru v indexu. (Toto je místo, kde jsou čteni pro použití ve 3-pásmovém nástroji diff podle git mergetool.) git show můžete použít k jejich zobrazení.

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

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

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

Nejjednodušší způsob, jak vyřešit konflikt s použitím vzdálené verze, je:

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

Nebo pomocí git> = 1.6.1:

git checkout --theirs _widget.html.erb
74
CB Bailey

Je to tak jednoduché.

git merge --abort

Git sám vám zobrazí řešení, když jste v tomto typu problémů a spusťte příkaz git status.

git status

Doufám, že to pomůže lidem.

58
Jagruttam Panchal

Vzhledem k tomu, že komentáře naznačují, že git reset --merge je alias pro git merge --abort, stojí za povšimnutí, že git merge --abort je pouze ekvivalentní git reset --merge vzhledem k tomu, že je přítomno MERGE_HEAD. To lze přečíst v příkazu git help for merge.

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

Po nezdařeném sloučení, když neexistuje MERGE_HEAD, může být neúspěšné sloučení zrušeno příkazem git reset --merge, ale ne nutně s git merge --abort, takže nejsou jen staré a nové syntaxe pro totéž .

Osobně shledávám git reset --merge mnohem silnější pro scénáře podobné popsanému a obecně selhal.

32
Martin G

A pokud skončíte s konfliktem sloučení a nemáte žádné věci, které by se daly spáchat, ale po sloučení všech níže uvedených příkazů se zobrazí chyba sloučení,

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

prosím odstraňte

.git index.lock

soubor [vyjmout vložení na jiné místo v případě obnovení] a poté zadejte některý z níže uvedených příkazů v závislosti na verzi, kterou chcete.

git reset --hard HEAD
git reset --hard Origin

Doufám, že to pomůže !!!

21
Nirav Mehta

Vzhledem k tomu, že Git 1.6.1.3 git checkout byl schopen provést platbu z obou stran sloučení:

git checkout --theirs _widget.html.erb
17
Alain O'Dea

Alternativou, která zachovává stav pracovní kopie, je:

git stash
git merge --abort
git stash pop

Obecně radím proti tomu, protože je efektivně jako sloučení v Subversion, protože odhodí vztahy mezi pobočkami v následujícím závazku.

15
Alain O'Dea

Zjistil jsem, že pro mě fungovalo následující (vrátit jeden soubor do stavu před sloučením):

git reset *currentBranchIntoWhichYouMerged* -- *fileToBeReset*
1
Malcolm Boekhoff