Beim Auflösen eines Merge-Konflikts, möchte man manchmal einfach die eine oder die andere Datei behalten. Du musst nicht die einzelnen Dateien öffnen und hunderte von Konflikten beheben. Du brauchst nur die gewünschte Datei auswählen und schon bist du fertig. Bedauerlicherweise ist das in älteren Version von Git nicht besonders klar, aber in jüngeren Versionen ist es viel einfacher. Großen Dank an Kevin Old für seinen Beitrag zu dem Thema, der mich an das Problem erinnerte.
Hier das Szenario: Du bist mittendrin in einem Merge und du möchtest die eine oder die andere Datei behalten.
$ git merge master Auto-merged _layouts/default.html CONFLICT (content): Merge conflict in _layouts/default.html Auto-merged index.html CONFLICT (content): Merge conflict in index.html Automatic merge failed; fix conflicts and then commit the result.
Hier gibt es zwei Dateien, die nicht verschmolzen (merged) sind. Laut git checkout Manpage gibt es eine --theirs
und --ours
Option für den Befehl. Die erste Option behält die Version der Datei, die du einbringst und die andere Option behält die Datei in ihrer Originalfassung.
Die folgenden Befehle behalten unsere Version für index.html und verwenden dann nur die andere Version der Datei _layouts/default.html.
git checkout --ours index.html git checkout --theirs _layouts/default.html
Bedauerlicherweise gibt es diese Optionen nur in Git 1.6.1 und höher. Wenn du eine ältere Version verwendest und nicht aktualisieren möchtest, gibt es eine Umleitung. Um --theirs
zu emulieren, ist folgendes zu tun:
git reset -- _layouts/default.html git checkout MERGE_HEAD -- _layouts/default.html
Und für --ours
:
git reset -- index.html git checkout ORIG_HEAD -- index.html
Sobald die Konflikte gelöst sind, übernimmt git add
die notwendigen Änderungen und git commit
bestätigt sie. Wenn du beim Merge Probleme hattest, deren Lösung anderen helfen könnte, einfach einen Kommentar abgeben.