it-swarm.com.de

Git rebase wird nach einem Lösch-/Änderungskonflikt nicht fortgesetzt

Ich bin mitten in einer Rebase meines Meisters an einem Bühnenzweig

git checkout stage
git rebase master

Irgendwann habe ich zwei Dateien gelöscht und die beiden Dateien entsprechend der GIT geändert.

warning: too many files, skipping inexact rename detection
CONFLICT (delete/modify): test-recommendation-result.php deleted in HEAD and modified in [Bug] Fix test recommender. Version [Bug] Fix test recommender of test-recommendation-result.php left in tree.
CONFLICT (delete/modify): test-recommendation.php deleted in HEAD and modified in [Bug] Fix test recommender. Version [Bug] Fix test recommender of test-recommendation.php left in tree.
Failed to merge in the changes.
Patch failed at 0015.

Ich möchte sagen "Yeah git, mach weiter und lösche diese Dateien" so ....

git rm test-recommendation-result.php
git rm test-recommendation.php
git rebase --continue

Git sagt:

Applying [Bug] Fix test recommender
No changes - did you forget to use 'git add', Stupid?

When you have resolved this problem run "git rebase --continue".
If you would prefer to skip this patch, instead run "git rebase --skip".
To restore the original branch and stop rebasing run "git rebase --abort".

Ich sage "Nenne mich nicht" dumm "und tu, was ich dir gesagt habe!"

Wir sind jetzt in einer Pattsituation. Wer hat recht und wie kann ich das beheben?

45
Clutch

git add -A gefolgt von git rebase --continue. Dies sollte alle Änderungen hinzufügen - einschließlich des Entfernens der Dateien, und dann fortfahren.

Es gibt keine Garantie, dass das Commit keine anderen Dateien hatte, die nicht miteinander in Konflikt standen und zusammengeführt werden sollten. git rebase --skip würde diese Dateien verlieren. Das willst du nicht.

Hoffe das hilft.

44
Adam Dymitruk

Wenn alles andere fehlschlägt, lesen Sie die Nachricht.

Dieser Patch versucht, zwei Dateien zu ändern, diese wurden jedoch bereits gelöscht. Wieder löschen löschte nichts.

Führen Sie einfach git rebase --skip aus.

2
Josh Lee

Ich traf dies, wenn ein Commit eine binäre Datei hinzufügte, die mit einer vorhandenen Datei in Konflikt stand.

Ich bin davon gekommen durch:

  • löschen der vorhandenen Datei
  • Ändern eines einzelnen Zeichens in einen Kommentar in einer anderen Datei und 
  • "git addieren" diese irrelevante Änderung. 

Git war wieder glücklich. :)

1
Guy Lancaster

Es gibt nicht eine magische Befehlsfolge, die immer ausgeführt wird, um diese Situation zu lösen. Wenn ja, würden die Entwickler von GIT diese Aktion nur ausführen und den Benutzer nicht stören.

Berücksichtigen Sie, dass dieser Fehler auch auftreten kann, wenn Sie Änderungen vornehmen, die sich auf eine Datei auswirken, die neu formatiert oder umbenannt wurde.

Angenommen, Sie haben einen Zweig namens support/1.0, der wie folgt aussieht:

 com.somewhere.package-a /
 MyClass.Java 
 MyOtherClass.Java 

Nehmen wir an, zwischen Version 1.0 und 1.5 wurde dies überarbeitet. Jetzt sieht release/1.5 so aus:

 com.somewhere.package /
 ein/
 MyClass.Java 
 ANewClass.Java 
 b /
 MyOtherClass.Java 

Nehmen wir an, Sie haben einen Feature-Zweig von Version 1.5, den Sie zu einem Feature-Zweig, der auf support/1.0 basiert, zurückportieren möchten. In diesem Commit wurden alle drei Dateien von Version 1.5 (MyClass.Java, ANewClass.Java und MyOtherClass.Java) geändert.

Wenn Sie versuchen, Rebase oder Kirschpickel zu verwenden, um beim Back-Port zu helfen, kann eines von zwei Dingen passieren:

  • Wenn die Dateien im Zuge der transplantierten Änderungen umbenannt wurden, Oder zwischen den unmittelbar übergeordneten Commits der Änderungen, die als Transplantiert wurden, kann die integrierte Umbenennungserkennung von GIT feststellen, dass diese .__ mit Originalnamen und einfach die Änderungen auf die Originaldateien anwenden.

  • Wenn die Dateien im Verlauf von Release 1.5 (nach Auslieferung von Release 1.0) weit genug umbenannt wurden, teilt GIT Ihnen mit, dass die -Dateien in release/1.0 gelöscht wurden, da sie nicht wissen, in welchen Dateien 1,0 entsprechen den Änderungen von 1,5.

ANewClass.Java löst mit großer Wahrscheinlichkeit den Fehler aus, dass er gelöscht wurde, es sei denn, er wurde zu einer der Änderungen hinzugefügt, die zurückportiert wurden.

Da Code verloren gehen kann, wenn Sie blind einem Befehlssatz folgen, um diese Situation zu beheben, fordert GIT Sie daher zur manuellen Anleitung auf.

0
GuyPaddock