2017-08-16 5 views
1

beheben Ich vermasselt. Ich habe andere Zweige zu meiner Zweigstelle zusammengeführt. Die Veränderungen auf beiden Seiten waren beträchtlich und ich habe extrem lange Zeit damit verbracht, Konflikte zu lösen. Nachdem ich die Zusammenführung vorgenommen hatte, wurde mir klar, dass ich vergessen hatte, eine Datei hinzuzufügen, sodass die Zusammenführung unvollständig ausgeführt wurde. Ich wollte die Geschichte nicht mit einer "vergessenen Veränderung" verpesten, also beschloss ich, sie zu reparieren, bevor ich drängte. Ich rief anEin Merge-Commit in Git

git reset --soft HEAD~ 

Dann fügte ich die verpasste Änderung hinzu und wollte neu committen. Git weiß jedoch nicht mehr, dass es sich um ein Merge-Commit handeln sollte. Gibt es einen Ausweg, ohne die gesamte Zusammenführung erneut durchzuführen?

Antwort

2

Was ich tun würde, wenn ich wollte meine letzte verpflichten ändern (ob es sich um eine Zusammenführung zu begehen ist oder eine normale begehen):

  1. Sie die Änderung (in Ihrem Fall fügen Sie die Datei hinzu)
  2. Stage die Änderung. Z.B. mit git add .
  3. Fügen Sie die Änderung mit

    git commit --amend

Und du bist

getan Da Sie sind nicht an diesem Punkt begehen dauern mehr, zuerst musst du dorthin zurückkehren. Wie?

  1. Listen Sie die letzten Referenzen auf, die Sie hatten, um herauszufinden, welcher Hash der Merge-Commit war, den Sie wiederherstellen möchten. Führen

    git reflog

  2. Suchen in dieser Liste und kopieren Sie den Hash-Wert des Merge begehen. Suchen Sie nach etwas wie [...] Zusammenführen Herkunft/blablaal, direkt unter etwas wie [...]] Zurückgesetzt ~

  3. Zurücksetzen auf die sich verpflichten, HEAD bewegen

    git reset --hard HASH_FROM_BULLET_2

nun (als ob Sie nicht die git reset --soft HEAD~ getan haben) Sie An dem Punkt, an dem Sie gerade die ursprüngliche Zusammenführung durchgeführt haben, können Sie nun mit 4, 5 und 6 von Anfang an fortfahren.

+0

Dies funktioniert wie ein Zauber . Vielen Dank! –

1

Sie können zu einem bestimmten Commit auf einem Zweig auschecken, daher gehen Sie zurück, bevor die Zusammenführung aufgetreten ist und wiederholen Sie alles.

Go auf fusionierten Zweig:

git log 

enter image description here

zeigt alle auf dem Zweig mit den dazugehörigen IDs verpflichtet (oder Schlüssel) kopieren Sie einfach die ersten Buchstaben des gewünschten begehen Schlüssel

git checkout [commit_id you copied] 

Sie sollten jetzt vor dem Zusammenführen auf dem Zweig sein. Wenn Sie die Commits fortsetzen möchten, können Sie die Commit-IDs auschecken.

+0

Ich weiß, ich kann "alles wiederholen", aber ich fragte, ob ich es beheben kann, "ohne die gesamte Zusammenführung neu zu machen" (weil es nicht einfach ist). –

+0

Bitte beachten Sie, dass Sie, wenn Sie ein vorheriges Commit * check * ausführen, sich im Zustand 'detached HEAD 'befinden und Sie in diesem Zustand nichts festlegen können. Wenn du den Merge wiederholen wolltest (was nicht notwendig ist, wie ich in der anderen Antwort ausführe), müsstest du * hard reset * auf diesen Commit mit 'git reset --hard [commit_id_you_copied]' –