In den wichtigsten Antworten wird beschrieben, wie Sie die Änderungen aus einem bestimmten Commit auf den aktuellen Zweig anwenden . Wenn Sie das mit "Zusammenführen" meinen, verwenden Sie einfach Cherry-Pick, wie sie vorschlagen.
Aber wenn Sie tatsächlich eine Zusammenführung wünschen , dh Sie möchten eine neue Verpflichtung mit zwei Eltern - das vorhandene Commit für den aktuellen Zweig und das Commit, von dem aus Sie Änderungen anwenden -, kann ein Cherry-Pick dies nicht erreichen.
Ein echter Zusammenführungsverlauf kann beispielsweise wünschenswert sein, wenn Ihr Erstellungsprozess die Git-Abstammung nutzt, um automatisch Versionszeichenfolgen basierend auf dem neuesten Tag (unter Verwendung git describe
) festzulegen .
Anstelle von Cherry-Pick können Sie eine tatsächliche git merge --no-commit
und dann den Index manuell anpassen, um alle Änderungen zu entfernen, die Sie nicht möchten.
Angenommen, Sie befinden sich in einer Verzweigung A
und möchten das Commit an der Spitze der Verzweigung zusammenführen B
:
git checkout A
git merge --no-commit B
Jetzt können Sie ein Commit mit zwei Elternteilen erstellen, die aktuellen Tipp-Commits von A
undB
. Möglicherweise werden jedoch mehr Änderungen angewendet, als Sie möchten, einschließlich Änderungen aus früheren Commits im B-Zweig. Sie müssen diese unerwünschten Änderungen rückgängig machen und dann festschreiben.
(Es gibt möglicherweise eine einfache Möglichkeit, den Status des Arbeitsverzeichnisses und des Index auf den Stand vor dem Zusammenführen zurückzusetzen, sodass Sie eine saubere Tabelle haben, auf der Sie das gewünschte Commit auswählen können ich weiß nicht , wie das reine Weste zu erreichen. git checkout HEAD
und git reset HEAD
werde sowohl den Fusions - Zustand entfernen, um den Zweck dieses Verfahrens zu besiegen.)
Machen Sie die unerwünschten Änderungen manuell rückgängig. Zum Beispiel könnten Sie
git revert --no-commit 012ea56
für jedes unerwünschte Commit 012ea56
.
Wenn Sie mit dem Anpassen fertig sind, erstellen Sie Ihr Commit:
git commit -m "Merge in commit 823749a from B which tweaked the timeout code"
Jetzt haben Sie nur die gewünschte Änderung, und der Ahnenbaum zeigt, dass Sie technisch von B zusammengeführt wurden.