2016-05-03 23 views
1

Ich habe 3 Commits gemacht (A, B, C):Wie füge ich ein Commit in ein früheres Commit ein?

$ git log -3 --pretty=oneline 
64ffaf1ec379150cb423844bfff7557704c92a4e C 
bf89fa3c27dfb9eb3d4c0d83f268902fa828d986 B 
a9cae79f45c2494909ff64246182d6a4fde51eda A 

Wie C fusionieren begehen in A zu begehen?

Ich möchte Commit B, die Änderungen in jetzt zusammengeführt A und C Commit widerspiegeln würde.

Ich bin mir bewusst, dass ich ein Commit mit git Rebase in ein vorheriges Commit zusammenführen kann. Aber ich weiß nicht, wie man ein bestimmtes Commit in ein früheres Commit einfügt und den Änderungsverlauf neu schreibt.

+0

Wenn Sie Commit C nur in A zusammenführen möchten, verwenden Sie cherrypick. Aber warum nicht einfach zu A gehen und 'git merge C'? – iberbeu

+0

@iberbeu Das würde Git nicht aus dem Git Log entfernen. Der Grund dafür ist, das Git Log sauber zu halten (das ist buchstäblich der einzige Grund). – Gajus

Antwort

2

Ich gehe davon aus, dass Sie mit "merge" meinen "kombinieren" und nicht die technische Verwendung von "merge" in git. In diesem Fall ist git rebase --interactive dein Freund. dass Laufen wird der Editor mit folgendem Inhalt bringen:

pick a9cae79 A 
pick bf89fa3 B 
pick 64ffaf1 C 

Sie dies wie folgt aus, um etwas ändern wollen:

pick a9cae79 A 
squash 64ffaf1 C 
pick bf89fa3 B 

Dann speichern und den Editor beenden. Dadurch werden die Änderungen der Commits A und C kombiniert und Sie werden aufgefordert, die Commit-Nachricht zu bearbeiten, die mit den Commit-Nachrichten aus den Commits A und C ausgefüllt wurde. Wenn Sie die Commit-Nachricht von Commit C verwerfen möchten, verwenden Sie stattdessen fixup von squash im oben genannten.

+0

Das ist genial. Ich habe nicht bemerkt, dass ich die Reihenfolge der Git-Commits ändere, wenn ich eine interaktive Rebase durchführe. – Gajus

Verwandte Themen