Ich hatte ein ähnliches Problem und habe es behoben, indem ich meine Arbeit neu ausgerichtet habe, um sie an die Organisation der Zieldatei anzupassen.
Angenommen, Sie haben Änderungen original.txtan Ihrem Zweig (dem localZweig) vorgenommen, der jedoch am Hauptzweig in original.txteinen anderen kopiert wurdecopy.txt . Diese Kopie wurde in einem Commit erstellt, das wir Commit nennen CP.
Sie möchten alle Ihre lokalen Änderungen, Commits Aund Bdarunter, die vorgenommen wurden original.txt, auf die neue Datei anwenden copy.txt.
---- X -----CP------ (master)
\
\--A---B--- (local)
Erstellen Sie am Wegpunkt moveIhrer Änderungen mit einen Wegwerfzweig git branch move X. Das heißt, setzen Sie den moveZweig auf Commit X, den vor den Commits, die Sie zusammenführen möchten. Dies ist höchstwahrscheinlich das Commit, von dem aus Sie zur Implementierung Ihrer Änderungen verzweigt haben. Wie Benutzer @digory doo unten schrieb, können Sie tun git merge-base master local, um zu finden X.
---- X (move)-----CP----- (master)
\
\--A---B--- (local)
Geben Sie in diesem Zweig den folgenden Umbenennungsbefehl aus:
git mv original.txt copy.txt
Dadurch wird die Datei umbenannt. Beachten Sie, dass copy.txtdies zu diesem Zeitpunkt noch nicht in Ihrem Baum vorhanden war.
Übernehmen Sie Ihre Änderung (wir nennen diese Festschreibung MV).
/--MV (move)
/
---- X -----CP----- (master)
\
\--A---B--- (local)
Sie können Ihre Arbeit jetzt neu aufbauen auf move:
git rebase move local
Dies sollte problemlos funktionieren und Ihre Änderungen werden copy.txtin Ihrer lokalen Niederlassung übernommen.
/--MV (move)---A'---B'--- (local)
/
---- X -----CP----- (master)
Jetzt möchten oder müssen Sie nicht unbedingt ein Commit haben MV im Verlauf Ihres Hauptzweigs haben, da der Verschiebevorgang zu einem Konflikt mit dem Kopiervorgang beim Festschreiben CPim Hauptzweig führen kann.
Sie müssen Ihre Arbeit nur erneut neu starten und den Verschiebevorgang wie folgt verwerfen:
git rebase move local --onto CP
... wo CPist das Commit wo copy.txtwurde in der anderen Niederlassung eingeführt. Dadurch werden alle Änderungen zusätzlich copy.txtzum CPCommit neu berechnet . Jetzt ist Ihr localZweig genau so, als hätten Sie ihn immer geändert copy.txtund nicht original.txt, und Sie können weiterhin mit anderen zusammenführen.
/--A''---B''-- (local)
/
-----X-------CP----- (master)
Es ist wichtig, dass die Änderungen angewendet werden CPoder auf andere Weise copy.txtnicht vorhanden sind und die Änderungen wieder angewendet werdenoriginal.txt .
Hoffe das ist klar. Diese Antwort kommt zu spät, kann aber für andere nützlich sein.