it-swarm.com.de

git merge "von uns gelöscht"

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?

24
kris

Hier ist eine Teillösung:

  1. Lösen Sie alle nicht gelöschten Zusammenführungskonflikte von Hand, was Sie trotzdem tun müssen

  2. 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.

  3. Dann cat filesToRemove.txt | xargs git rm, um alle Dateien zu entfernen.

12
Tim Biegeleisen

Eine Zeile fix:

git diff --name-only --diff-filter=U | xargs git rm
8

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

5
androidevil

Ich lasse die Frage - weil ich sicher bin, dass es eine gute Antwort gibt - das habe ich in der Zwischenzeit getan:

  1. Führen Sie git status aus, um die Liste der gelöschten Dateien (1082) und die Anzahl der Zusammenführungskonflikte (3) anzuzeigen.
  2. Bearbeiten Sie in einem Texteditor die drei Dateien, in denen Zusammenführungskonflikte aufgetreten sind, manuell, und führen Sie dann git add für sie aus
  3. Erstellen Sie eine Textdatei mit einer Zeile mit dem Buchstaben "d" in jeder Zeile und nichts weiter für jede der (1082) Dateien, die gelöscht wurden (d.txt).
  4. git mergetool < d.txt ausführen

Nicht elegant, aber schneller als das Drücken des Buchstabens "d" und geben Sie 1082-mal ein

0
kris

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.

0
Brian Davis