Ich bin auf einen Zusammenführungskonflikt gestoßen. Wie kann ich die Zusammenführung abbrechen?

Lesezeit: 6 Minuten

Benutzer-Avatar
Gwyn Morfey

ich benutzte git pull und hatte einen Zusammenführungskonflikt:

unmerged:   some_file.txt

You are in the middle of a conflicted merge.

Wie verwerfe ich meine Änderungen an der Datei und behalte nur die abgerufenen Änderungen?

  • Ich weiß, das ist eine super alte Frage, aber willst du das abbrechen? ganz zusammenführen und den Zweig, den Sie zusammengeführt haben, nicht zusammenführen, oder diese eine Datei einfach als Teil einer größeren Zusammenführung ignorieren und alle anderen Dateien wie gewohnt zusammenführen lassen? Für mich impliziert Ihr Titel ersteres, Ihr Fragetext verlangt letzteres. Die Antworten tun beides, ohne die Dinge klar zu machen.

    – rjmunro

    7. Oktober 2013 um 11:18 Uhr

  • Ich habe einen ähnlichen Fall beim Commit erhalten, der besagt, dass die automatische Zusammenführung fehlgeschlagen ist. Konflikte beheben und das Ergebnis dann festschreiben: [rejected] gh-pages -> gh-pages (non-fast-forward)

    – eQ19

    30. April 2016 um 17:32 Uhr

  • Gwyn, es könnte nützlich sein, hier eine akzeptierte Antwort auszuwählen. Die am besten bewertete ist etwas weniger sicher als einige der aktuelleren Lösungen, daher denke ich, dass es hilfreich wäre, andere darüber hervorzuheben 🙂

    – Freundlich

    6. Oktober 2016 um 13:11 Uhr

Benutzer-Avatar
Pat Notz

Da Ihr pull war damals erfolglos HEAD (nicht HEAD^) ist der letzte “gültige” Commit in Ihrem Zweig:

git reset --hard HEAD

Der andere Teil, den Sie möchten, ist, dass ihre Änderungen Ihre Änderungen überschreiben.

Ältere Versionen von git erlaubten Ihnen, die Merge-Strategie „theirs“ zu verwenden:

git pull --strategy=theirs remote_branch

Dies wurde jedoch inzwischen entfernt, wie in erläutert diese Nachricht von Junio ​​Hamano (der Git-Betreuer). Wie vermerkt in die Verbindungstattdessen würden Sie Folgendes tun:

git fetch origin
git reset --hard origin

  • Anstatt einen Hard-Reset durchzuführen, können Sie ihn auf eine granularere Ebene bringen, indem Sie Folgendes tun: git fetch origin –> git reset origin (soft reset, your changes are still present) –> git checkout file_to_use_their_version_of another_file (steamroll your own changes back to match the origin) Ich benutze Git Pull nie mehr. Da bei einem Kampf zwischen meinem neuesten Code und dem Ursprung immer der Ursprung gewinnen sollte, habe ich immer git fetch und git rebase origin. Das macht meine Zusammenführungen und Konflikte tatsächlich selten.

    – Kzqai

    13. Mai 2010 um 16:20 Uhr


  • Ich stimme zu. Ich mag es auch, zuerst abzurufen und dann die Upstream-Änderungen zu untersuchen (git log ..@{upstream} oder git diff ..@{upstream}). Danach werde ich, wie Sie, meine Arbeit umbasieren.

    – Pat Notz

    14. Mai 2010 um 23:26 Uhr

  • Wie in einer neueren Antwort erwähnt, ist es ab Version 1.6.1 möglich, „git reset –merge“ zu verwenden.

    – Mattball

    23. Januar 2012 um 15:59 Uhr

  • ich benutzte git merge -X theirs remote_branch Anstatt von git pull --strategy=theirs remote_branch wie theirs sieht aus wie eine Option von recursive

    – mlt

    2. Juli 2012 um 15:28 Uhr

  • git merge --abort ist weit vorzuziehen.

    – Daniel Cassidy

    24. Februar 2016 um 15:48 Uhr

Benutzer-Avatar
Carl

Wenn Ihre Git-Version >= 1.6.1 ist, können Sie verwenden git reset --merge.

Wie @Michael Johnson erwähnt, können Sie auch verwenden, wenn Ihre Git-Version >= 1.7.4 ist git merge --abort.

Stellen Sie wie immer sicher, dass Sie keine nicht festgeschriebenen Änderungen haben, bevor Sie eine Zusammenführung starten.

Von dem git merge Manpage

git merge --abort ist äquivalent zu git reset --merge Wenn MERGE_HEAD ist anwesend.

MERGE_HEAD ist vorhanden, wenn eine Zusammenführung durchgeführt wird.

Auch in Bezug auf nicht festgeschriebene Änderungen beim Starten einer Zusammenführung:

Wenn Sie Änderungen haben, die Sie nicht festschreiben möchten, bevor Sie eine Zusammenführung starten, einfach git stash sie vor der Zusammenführung und git stash pop nachdem die Zusammenführung beendet oder abgebrochen wurde.

  • Interessant – aber das Handbuch macht mir Angst. Wann genau ist der Einsatz sinnvoll? Wann müssten Sie die optional angeben <commit>? #GitMoment 😮

    – conni

    15. November 2011 um 4:36 Uhr

  • Sie würden dies normalerweise verwenden, wenn Sie die Zusammenführung von Anfang an wiederholen möchten. Ich musste das optionale Commit noch nie selbst angeben, daher ist die Standardeinstellung (kein optionales ) in Ordnung.

    – Carl

    15. November 2011 um 19:53 Uhr

  • Ich wünschte, diese Antwort hätte mehr Stimmen! An diesem Punkt scheint es in vielen Fällen die relevanteste Lösung zu sein.

    – Jay Taylor

    7. Dezember 2011 um 22:56 Uhr

  • Auch bei nicht festgeschriebenen Änderungen konnte git den Zustand vor dem Merge wiederherstellen. Nett!

    – T3rm1

    12. Juni 2014 um 11:45 Uhr

  • Ist git merge --abort nur ein Synonym für git reset --merge? Der Name macht sicherlich mehr Sinn, aber hat er die gleiche Funktionalität?

    – Tichon Jelvis

    22. Juli 2014 um 18:37 Uhr

Benutzer-Avatar
ignis

git merge --abort

Brechen Sie den aktuellen Konfliktlösungsprozess ab und versuchen Sie, den Zustand vor der Zusammenführung wiederherzustellen.

Wenn zu Beginn der Zusammenführung nicht festgeschriebene Arbeitsbaumänderungen vorhanden waren, git merge --abort werden diese Veränderungen teilweise nicht rekonstruieren können. Es wird daher empfohlen, Ihre Änderungen immer zu committen oder zu stashen, bevor Sie git merge ausführen.

git merge --abort ist äquivalent zu git reset --merge Wenn
MERGE_HEAD ist anwesend.

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

  • Dies ist seit git v1.7.4 verfügbar. Es ist ein Alias ​​für git reset –merge.

    – Michael Johnson

    24. April 2013 um 15:41 Uhr


Benutzer-Avatar
David Edel

Ich denke es ist git reset du brauchst.

Hüten Sie sich davor git revert bedeutet etwas ganz anderes als, sagen wir, svn revert – In Subversion wird das Zurücksetzen Ihre (nicht festgeschriebenen) Änderungen verwerfen und die Datei auf die aktuelle Version aus dem Repository zurücksetzen, wohingegen git revert macht einen Commit “rückgängig”.

git reset sollte das Äquivalent von tun svn revertdas heißt, verwerfen Sie Ihre unerwünschten Änderungen.

Benutzer-Avatar
Hanzla Habib

Für Git >= 1.6.1:

git merge --abort

Für ältere Versionen von Git erledigt dies die Aufgabe:

git reset --merge

oder

git reset --hard

In diesem speziellen Anwendungsfall möchten Sie die Zusammenführung nicht wirklich abbrechen, sondern nur den Konflikt auf eine bestimmte Weise lösen.

Es besteht auch keine besondere Notwendigkeit, zurückzusetzen und eine Zusammenführung mit einer anderen Strategie durchzuführen. Die Konflikte wurden von Git korrekt hervorgehoben und die Anforderung, die Änderungen der anderen Seite zu akzeptieren, gilt nur für diese eine Datei.

Für eine nicht zusammengeführte Datei in einem Konflikt stellt git die gemeinsame Basis, lokale und entfernte Version der Datei im Index zur Verfügung. (Hier werden sie zur Verwendung in einem 3-Wege-Diff-Tool gelesen git mergetool.) Sie können verwenden git show um sie anzusehen.

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

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

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

Der einfachste Weg, den Konflikt zu lösen, um die Remote-Version wörtlich zu verwenden, ist:

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

Oder mit git >= 1.6.1:

git checkout --theirs _widget.html.erb

Benutzer-Avatar
DARK_C0D3R

Sie können den Zusammenführungsschritt entweder abbrechen:

git merge --abort

ansonsten können Sie Ihre Änderungen behalten (auf welchem ​​Zweig Sie sich befinden)

git checkout --ours file1 file2 ...

Andernfalls können Sie andere Zweigänderungen beibehalten

git checkout --theirs file1 file2 ...

1331000cookie-checkIch bin auf einen Zusammenführungskonflikt gestoßen. Wie kann ich die Zusammenführung abbrechen?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy