Více na
Jak řešit konflikty sloučení v systému Git
Jak vyřešit konflikty sloučení v systému Git?
4577
3
Jak vyřešit konflikty sloučení v systému Git?
Vyzkoušejte:
git mergetool
Otevře se grafické rozhraní, které vás provede každým konfliktem a vy si můžete vybrat, jakým způsobem se má sloučit. Někdy to vyžaduje následnou ruční úpravu, ale obvykle to stačí samo. Je to určitě mnohem lepší než dělat celou věc ručně.
Podle komentáře @JoshGlover:
Příkaz nemusí nutně otevřít grafické uživatelské rozhraní, pokud si ho nenainstalujete. Spuštění
git mergetool
u mě vedlo k použitívimdiff
. Místo toho si můžete nainstalovat některý z následujících nástrojů:meld
,opendiff
,kdiff3
,tkdiff
,xxdiff
,tortoisemerge
,gvimdiff
,diffuse
,ecmerge
,p4merge
,araxis
,vimdiff
,emerge
.Níže je uveden ukázkový postup použití
vimdiff
pro řešení konfliktů sloučení. Na základě tohoto odkazuKrok 1: Spusťte následující příkazy v terminálu
Tím nastavíte vimdiff jako výchozí nástroj pro slučování.
Krok 2: V terminálu spusťte následující příkaz
Krok 3: Zobrazí se vimdiff v následujícím formátu
Tyto 4 zobrazení jsou
Mezi těmito zobrazeními se můžete pohybovat pomocí ctrl+w. Do zobrazení MERGED se dostanete přímo pomocí ctrl+w a následně j.
Více informací o navigaci vimdiff zde a zde.
Krok 4. Zobrazení MERGED můžete upravit následujícím způsobem
Pokud chcete získat změny z REMOTE
Pokud chcete získat změny z BASE
Pokud chcete získat změny z LOCAL
Krok 5. Uložit, ukončit, odevzdat a vyčistit
:wqa
uložte a ukončete vigit commit -m "message"
git clean
Odstranění přebytečných souborů (např. *.orig) vytvořených nástrojem diff.Zjistěte, které soubory jsou v konfliktu (Git by vám to měl říct).
Otevřete každý soubor a prozkoumejte rozdíly; Git je vymezí. Doufejme, že bude zřejmé, kterou verzi každého bloku zachovat. Možná budete muset diskutovat s kolegy vývojáři, kteří kód odevzdali.
Jakmile'vyřešíte konflikt v souboru,
git add the_file
.Jakmile jste vyřešili všechny konflikty, proveďte
git rebase --continue
nebo jiný příkaz. Git řekl, že máte provést po dokončení.Pokud často provádíte malé revize, začněte tím, že se podíváte na komentáře k revizím pomocí
git log --merge
. Pak vámgit diff
ukáže konflikty.U konfliktů, které zahrnují více než několik řádků, je snazší zjistit, co se děje, v externím nástroji s grafickým uživatelským rozhraním. Mám rád opendiff -- Git také podporuje vimdiff, gvimdiff, kdiff3, tkdiff, meld, xxdiff, emerge out of the box a můžete si nainstalovat další:
git config merge.tool "your.tool"
nastaví zvolený nástroj agit mergetool
vám po neúspěšném sloučení ukáže rozdíly v kontextu.Pokaždé, když upravíte soubor, abyste vyřešili konflikt,
git add filename
aktualizuje index a váš diff se již nezobrazí. Jakmile jsou všechny konflikty vyřešeny a jejich soubory jsougit add
-ovány,git commit
dokončí vaše sloučení.