Ich habe git pull
benutzt und hatte einen Merge-Konflikt:
unmerged: _widget.html.erb
You are in the middle of a conflicted merge.
Ich weiß, dass die andere Version der Datei gut ist und meine schlecht ist, also sollten alle meine Änderungen verworfen werden. Wie kann ich das tun?
Da Ihr pull
erfolglos war, ist HEAD
(nicht HEAD^
) der letzte "gültige" Commit auf Ihrem Zweig:
git reset --hard HEAD
Der andere Teil, den Sie wollen, ist, dass deren Änderungen Ihre Änderungen überschreiben.
Ältere Versionen von git erlaubten die Verwendung der "theirs" Merge-Strategie:
git pull --strategy=theirs remote_branch
Aber das wurde inzwischen entfernt, wie in dieser Nachricht von Junio Hamano (dem Git-Maintainer) erklärt wird. Wie in dem Link erwähnt, würden Sie stattdessen Folgendes tun:
git fetch origin
git reset --hard origin
Ich glaube, Sie brauchen git reset
.
Beachten Sie, dass git revert
etwas ganz anderes bedeutet als z.B. svn revert
- in Subversion verwirft revert Ihre (nicht übertragenen) Änderungen und setzt die Datei auf die aktuelle Version aus dem Repository zurück, während git revert
eine Übertragung "rückgängig" macht.
git reset
sollte das Äquivalent zu svn revert
bewirken, d.h. Ihre unerwünschten Änderungen verwerfen.
In diesem speziellen Anwendungsfall wollen Sie die Zusammenführung nicht wirklich abbrechen, sondern den Konflikt nur auf eine bestimmte Art und Weise auflösen.
Es besteht auch keine besondere Notwendigkeit, die Zusammenführung zurückzusetzen und 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. (Von dort werden sie für die Verwendung in einem 3-Wege-Vergleichstool von git mergetool
gelesen). Sie können git show
verwenden, um sie zu sehen.
# 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 aufzulösen und die entfernte Version wortwö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