Jak cofnąć połączenie git z konfliktami

785

Jestem na gałęzi mybranch1. mybranch2jest rozwidlony mybranch1i dokonano zmian w mybranch2.

Potem mybranch1zrobiłem git merge --no-commit mybranch2 To pokazuje, że podczas łączenia występowały konflikty.

Teraz chcę odrzucić wszystko ( mergepolecenie), aby mybranch1powróciło do poprzedniego stanu. Nie mam pojęcia, jak sobie z tym poradzić.

Anszul
źródło

Odpowiedzi:

1355

Najnowsze Git:

git merge --abort

Próba zresetowania kopii roboczej do stanu, w jakim znajdowała się przed scaleniem. Oznacza to, że powinien przywrócić wszelkie niezaangażowane zmiany sprzed scalenia, chociaż nie zawsze może to zrobić niezawodnie. Ogólnie i tak nie powinieneś łączyć się z niezatwierdzonymi zmianami.

Przed wersją 1.7.4:

git reset --merge

Jest to starsza składnia, ale działa tak samo jak powyżej.

Przed wersją 1.6.2:

git reset --hard

który usuwa wszystkie niezatwierdzone zmiany, w tym niezatwierdzone scalenie. Czasami takie zachowanie jest przydatne nawet w nowszych wersjach Gita, które obsługują powyższe polecenia.

Daniel Cassidy
źródło
1
Ale w starszych wersjach git jest to sposób użycia
Anshul
7
Czasami nadal musisz używać git reset --mergenawet w nowszych wersjach. Wystąpił git merge --abortbłąd (nie wprowadzając żadnych zmian) w przypadku git reset --mergepowodzenia (i właściwego działania) w git 2.2.1.
Theodore Murdock,
Zauważyłem, że muszę to zrobić git merge --abort, git reset --mergegdy pojawia się konflikt automerge z powodu wyskakiwania mojej skrytki.
Szef kuchni Faraon
1
zwykle git merge --abortdziała dla mnie, ale znalazłem się w sytuacji, w której wyewidencjonowałem się w stanie odłączonym HEAD, a jeden z moich plików miał stan „oba zmodyfikowane”. Chciałem porzucić wszystko i wrócić do oddziału, musiałem git reset --hard, git merge --abortpowiedział mi, że nie ma żadnego scalenia do przerwania (brak MERGE_HEAD).
yano
Czasami git merge --abortnie jest w stanie przywrócić ci poprzedniego stanu, w takim przypadku „starsza składnia” załatwia sprawę git reset --hard.
Kevin Stewart
130

W rzeczywistości warto zauważyć, że git merge --abortjest to odpowiednik tylko git reset --mergebiorąc pod uwagę, że MERGE_HEADjest obecny. Można to odczytać w pomocy git dla polecenia scalania.

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

Po nieudanym scaleniu, gdy nie ma MERGE_HEAD, nieudanego scalenia można cofnąć, git reset --mergeale niekoniecznie za pomocą git merge --abort, więc są one nie tylko starą i nową składnią tego samego .

Osobiście uważam, że jest git reset --mergedużo bardziej przydatny w codziennej pracy.

Martin G.
źródło
2
Dziękuję, ta informacja była bardzo pomocna. Miałem połączenie, które zaczęło się git stash applyod niewłaściwej gałęzi, i git merge --abortnie zrobiłem nic (nie MERGE_HEAD), podczas gdy git reset --mergezrobiłem lewę.
geomaster
4
Widziałem około 10 osób mówiących, że git merge --abortto nowe polecenie, git reset --mergei natknąłem się na ten sam problem, co @geomaster, to było bardzo pomocne dzięki!
Tom
106

Zakładając, że używasz najnowszego gita,

git merge --abort
Adam Dymitruk
źródło
Ok, to nie działa z 1.7.0.7 :(. Muszę użyć resetowania - z tym
twardym
5

Są dwie rzeczy, które możesz zrobić najpierw cofnąć scalenie poleceniem

git merge --abort

lub

możesz tymczasowo przejść do poprzedniego stanu zatwierdzenia przez polecenie

git checkout 0d1d7fc32 
Manish Kumar Singh
źródło
0

Sourcetree

Jeśli nie zatwierdzisz scalenia, po prostu kliknij dwukrotnie inną gałąź (= kasa), a gdy sourcetree zapyta Cię o odrzucenie wszystkich zmian, wówczas zgódź się

Kamil Kiełczewski
źródło