2016-08-09 19 views
1

Eine Datei im Master-Repository wurde in einen Unterordner verschoben, auf meinem lokalen Server löschte ich die Datei und wollte es bei einem zukünftigen Check-in an den neuen Speicherort hinzufügen .Git-Zweig divergierte nach dem Entfernen einer Datei, die verschoben wurde

Nach dem Einchecken und Ausführen einer git pull --rebase origin master hatte ich einen Konflikt, der besagt, dass die Datei in meinem Commit gelöscht und in einem anderen Commit umbenannt/verschoben wurde, so dass die Zusammenführung fehlgeschlagen ist.

Ich tat dann eine git rebase --abort.

Nun, wenn ich git Status bekomme ich die Meldung:

Ihre Branche und origin/master haben abwich und haben 1 und 27 Commits jeder.

Wie kann ich das beheben?

Antwort

1

Starten Sie den Vorgang git rebase erneut von Anfang an.

Wenn Sie den Schritt, wo es einen Konflikt gibt (Sie gelöscht, andere bewegt), müssen Sie entscheiden, wie der Konflikt zu lösen, vorzugsweise nach dem Gespräch mit dem anderen Entwickler, der den Umzug getan hat.

Wenn die Datei entfernt werden soll, dann ist es löschen:

git rm path/to/renamed/file 

Wenn die Datei bleiben soll, dann addieren:

git add path/to/renamed/file 

Die path/to/renamed/file ist der Konflikt Weg durch git status gegeben.

Nachdem Sie entfernt oder hinzugefügt, auch weiterhin die Fütterungsmaterial mit:

git rebase --continue 

Beachten Sie, dass, wenn Sie git add die konfliktbehafteten Datei entschieden, dann, wenn Sie git rebase --continue tun, es wird Sie wahrscheinlich sagen, dass dies:

No changes - did you forget to use 'git add'? 
If there is nothing left to stage, chances are that something else 
already introduced the same changes; you might want to skip this patch. 

Tatsächlich wurde die Datei bereits durch die zugegebene andere Zweig, mit Ihrem git add Sie gerade bestätigt, um diese Aktion zu halten, ohne wirklich etwas Neues hinzuzufügen. In diesem Fall setzen Sie die Rebase mit git rebase --skip fort.

+0

Ich habe git die Datei an dem neuen Ort hinzufügen, git status zeigt alles in grün, aber enthält diese neue Datei nicht in der Liste, bedeutet dies, dass die Datei enthalten ist und die alte Datei entfernt wird? – bigdaveygeorge

+0

Die alte Datei wurde in beiden Zweigen entfernt, sodass sie nicht entfernt wird. Wenn Sie 'git add' hinzufügen, wird die neue Datei (die Datei am neuen Speicherort) hinzugefügt. Übrigens, wenn du 'git rebase - fortfährst ', wird es dir wahrscheinlich" nichts zu tun "sagen, da die Datei bereits durch das hinzugefügte Commit hinzugefügt wurde, du bestätigst das nur, wenn der Konflikt gelöst wird, aber nein echte Veränderung zu tun. In diesem Fall 'git rebase --skip' – janos

1

Im Anfang der Graph begehen könnte wie sein: enter image description here

Sie verpflichtet, die Änderung und es war wie: enter image description here

Dann sind Sie ein rebase Pull tun wollte.Zunächst wurde origin/master aktualisiert: enter image description here

Wenn das Fütterungsmaterial Pull erfolgreich ist, wurde die grafische Darstellung zu erwarten sein wie: enter image description here

aber es wegen Konflikt ausgefallen ist und Sie es abgebrochen, so dass er diese wieder wurde: enter image description here

master und origin/master sind nach C divergiert. Wenn Sie den Konflikt jetzt vermeiden möchten, können Sie git reset HEAD^ --hard, laufen, die das Diagramm wie macht: enter image description here

Und dann aktualisieren master mit origin/master über git merge @{u} oder git merge origin/master. enter image description here

Jetzt können Sie die Datei löschen und die Änderungen übernehmen, wie Sie es zuerst getan haben. Und der letzte Graph wird wie: enter image description here

Sie nur D ignorieren können, die jetzt von master ‚s git log verschwindet, obwohl es in den Repo für eine ganze Weile existieren.