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?
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?
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
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
– 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
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 zugit reset --merge
Wenn
MERGE_HEAD
ist anwesend.
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
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 revert
das heißt, verwerfen Sie Ihre unerwünschten Änderungen.
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
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 ...
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