Ich mache eine große Zusammenführung ... Viele Dateien wurden aus dem Repo in meinem Zweig entfernt, und wenn ich die Zusammenführung durchführe, möchte ich diese Änderung für all diese Dateien beibehalten ... Es gibt auch einige Dateien, die muss explizit zusammengeführt werden, und ich beabsichtige, git mergetool
zu verwenden, um sie zusammenzuführen.
Ich möchte die "von uns gelöschte" Änderung beibehalten (dh die Dateien sollten gelöscht bleiben) für alle gelöschten Dateien. Andere Mischkonflikte möchte ich selbst lösen.
Gibt es eine Möglichkeit, die gelöschten Dateien gelöscht zu lassen?
Hier ist eine Teillösung:
Lösen Sie alle nicht gelöschten Zusammenführungskonflikte von Hand, was Sie trotzdem tun müssen
Geben Sie git diff --name-only --diff-filter=U
ein, um eine Liste aller verbleibenden Dateien in Konflikt zu erhalten. Diese Dateien müssen die Dateien sein, die Sie löschen möchten. Speichern Sie die Liste der entfernten Dateien als filesToRemove.txt
.
Dann cat filesToRemove.txt | xargs git rm
, um alle Dateien zu entfernen.
Eine Zeile fix:
git diff --name-only --diff-filter=U | xargs git rm
Sie können dieses Problem beheben, indem Sie die bearbeiteten Dateien beibehalten, indem Sie sie wieder hinzufügen und erneut festlegen.
git add .
oder
git add -A
Dann begehen Sie
git commit
Wenn Sie das Problem lösen möchten, indem Sie die Dateien entfernen, müssen Sie git rm
anstelle von git add
ausführen.
Siehe: Beheben eines Zusammenführungskonflikts über die Befehlszeile
Ich lasse die Frage - weil ich sicher bin, dass es eine gute Antwort gibt - das habe ich in der Zwischenzeit getan:
git status
aus, um die Liste der gelöschten Dateien (1082) und die Anzahl der Zusammenführungskonflikte (3) anzuzeigen.git add
für sie ausgit mergetool < d.txt
ausführenNicht elegant, aber schneller als das Drücken des Buchstabens "d" und geben Sie 1082-mal ein
Habe ich auch beobachtet
abc.txt: muss zusammenführen
beim Versuch
git rm abc.txt
nach dem Kirschenpicken und sehen die Datei im Status "Von uns gelöscht".
Am Ende habe ich einen Löschvorgang durchgeführt, indem ich Folgendes getan habe:
git add abc.txt
rm abc.txt
git add abc.txt
dies fügt dem Staging-Bereich abc.txt hinzu (im Wesentlichen wird die Datei "von uns gelöscht" neu erstellt (wodurch der Konfliktstatus aufgelöst wird).
löscht dann die Dateien aus dem Dateisystem
fügt dann dem besagten Bereich die Tatsache hinzu, dass die Datei jetzt verschwunden ist.
es gibt wahrscheinlich Shell-Tricks, um diese 3 Befehle auf Ihrer Gruppe von 1000+ Dateien ohne große Kopfschmerzen auszuführen.
es gibt wahrscheinlich bessere Wege, um damit umzugehen, aber da git rm abc.txt
nicht wie erwartet für unsere Situation (n) funktionierte, dachte ich, ich würde einen alternativen Satz von Befehlen teilen, der ohne das mergetool zu funktionieren scheint.