Wie kann man ein Commit zwischen zwei willkürlichen Commits in der Vergangenheit einfügen?
Angenommen ich habe die folgenden commit-Historie auf meiner lokalen Filiale:
A -- B -- C
Wie füge ich einen neuen commit zwischen A
und B
?
Kommentar zu dem Problem
commit genannt Ą? 🙂
Ich habe eine sehr ähnliche Frage auf wie fügt man eine neue version in der Vergangenheit statt einem commit.
InformationsquelleAutor der Frage BartoszKP | 2015-08-31
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist sogar noch einfacher als in OP ' s Antwort.
git rebase -i <any earlier commit>
. Dies zeigt eine Liste von commits in Ihrem text-editor konfiguriert werden.a1b2c3d
). In Ihrem editor, für diese Zeile ändernpick
zuedit
.a1b2c3d
) als wenn Sie gerade begangen wurde.git commit
(NICHT änderung, im Gegensatz zu den meistenedit
s). Dies schafft neue commit nach, die Sie gewählt haben.git rebase --continue
. Dieser gibt die aufeinanderfolgenden verpflichtet, so dass Sie Ihre neuen commit eingefügt an der richtigen Stelle.Beachten Sie, dass dies die Geschichte umzuschreiben, und brechen jemand anderes, der versucht zu ziehen.
InformationsquelleAutor der Antwort SLaks
Stellt sich heraus, ziemlich einfach zu sein, die Antwort gefunden hier. Angenommen, Sie sind auf einem Zweig
branch
. Führen Sie diese Schritte aus:erstellen Sie einen temporären Zweig von dem Begehen, nachdem Sie einfügen möchten die neuen commit (in diesem Fall verpflichten
A
):führen Sie die änderungen durch und Sie begeht, ist das erstellen einer commit, nennen wir es
N
:(oder
git add
gefolgt vongit commit
)Stellungswechsel die commits, die du haben willst, nach dem neuen commit (in diesem Fall verpflichtet
B
undC
) auf den neuen commit:(möglicherweise müssen Sie die Verwendung von
-p
zu bewahren, führt, wenn es Sie denn gab - Dank einen nicht mehr vorhandenen Kommentar von ciekawy)löschen Sie die temporären Zweig:
Danach, die Geschichte sieht wie folgt aus:
Ist es natürlich möglich, dass manche Konflikte werden angezeigt, während der rebasierung.
Im Falle Ihrer Filiale ist nicht nur-lokale-dies stellt die Geschichte umzuschreiben, so könnte schwerwiegende Probleme verursachen.
InformationsquelleAutor der Antwort BartoszKP
Unter der Annahme, dass die commit-Historie ist
preA -- A -- B -- C
, wenn Sie einfügen möchten ein commit zwischenA
undB
, die Schritte sind wie folgt:git rebase -i hash-of-preA
Git öffnet sich dein editor. Der Inhalt kann wie diese:
Ändern Sie die erste
pick
zuedit
:Speichern und Beenden.
Ändern Sie Ihren code und dann
git add . && git commit -m "I"
git rebase --continue
Nun Git-commit-Historie ist
preA -- A -- I -- B -- C
Wenn Sie Begegnung ein Konflikt, Git halt bei diesem commit. Sie können
git diff
zu suchen, Konflikt-Marker und zu lösen. Nach der Lösung aller Konflikte, die Sie verwenden müssengit add <filename>
zu sagen, Git, dass der Konflikt gelöst wurde, und führen Sie dann erneutgit rebase --continue
.Wenn Sie rückgängig machen möchten Stellungswechsel, verwenden
git rebase --abort
.InformationsquelleAutor der Antwort haolee
Sogar einfachere Lösung:
Erstellen Sie Ihre neuen commit am Ende, D. Jetzt haben Sie:
Führen:
Git öffnet sich dein editor, und es wird so Aussehen:
Nur bewegen, D, um den Gipfel wie diese, speichern Sie und beenden Sie
Nun haben Sie:
InformationsquelleAutor der Antwort Matthew