Die wichtigsten Antworten beschreiben, wie man die Änderungen aus eine bestimmte Übergabe an den aktuellen Zweig. Wenn es das ist, was Sie mit "wie man zusammenführt" meinen, dann benutzen Sie einfach Cherry-Pick, wie sie es vorschlagen.
Aber wenn Sie tatsächlich eine zusammenführen d.h. Sie wollen eine neue Übertragung mit zwei Elternteilen -- der existierende Commit auf dem aktuellen Zweig und der Commit, von dem Sie Änderungen übernehmen wollten -- dann wird ein Cherry-Pick das nicht erreichen.
Eine echte Merge-Historie kann zum Beispiel wünschenswert sein, wenn Ihr Build-Prozess die Vorteile von Git-Acestry nutzt, um automatisch Versionsstrings auf der Grundlage des letzten Tags zu setzen (mit git describe
).
Anstelle der Rosinenpickerei können Sie auch eine tatsächliche git merge --no-commit
und passen Sie dann den Index manuell an, um alle unerwünschten Änderungen zu entfernen.
Angenommen, Sie sind in einer Zweigstelle A
und Sie wollen die Übergabe an der Spitze des Zweigs zusammenführen B
:
git checkout A
git merge --no-commit B
Jetzt sind Sie in der Lage, einen Commit mit zwei Elternteilen zu erstellen, den aktuellen Tip-Commits von A
y B
. Es kann jedoch sein, dass Sie mehr Änderungen angewendet haben, als Sie wollten, einschließlich Änderungen aus früheren Übertragungen auf dem B-Zweig. Sie müssen diese unerwünschten Änderungen rückgängig machen und dann übertragen.
(Es gibt vielleicht eine einfache Möglichkeit, den Zustand des Arbeitsverzeichnisses und des Index auf den Stand vor der Zusammenführung zurückzusetzen, so dass Sie eine saubere Weste haben, aus der Sie den Commit, den Sie ursprünglich wollten, herauspicken können. Aber ich weiß nicht, wie man diesen Neustart erreichen kann. git checkout HEAD
y git reset HEAD
werden beide den Verschmelzungsstatus entfernen, was den Zweck dieser Methode zunichte macht).
Machen Sie daher die unerwünschten Änderungen manuell rückgängig. Sie könnten zum Beispiel
git revert --no-commit 012ea56
für jede unerwünschte Übertragung 012ea56
.
Wenn Sie mit den Anpassungen fertig sind, erstellen Sie Ihr Commit:
git commit -m "Merge in commit 823749a from B which tweaked the timeout code"
Jetzt haben Sie nur noch die gewünschte Änderung, und der Stammbaum zeigt, dass Sie technisch gesehen aus B hervorgegangen sind.