Das git cherry-pick <commit> Befehl können Sie ein einzelnes Commit (von einem beliebigen Zweig) ausführen und es im Wesentlichen in Ihrem Arbeitszweig neu starten.
Frage: etwa commit Aabgezweigt von masterund Sie tun einiges an Arbeit auf sie, die Schaffung Kind Commits Bdurch E. Angenommen, es wurde Enur 1 Zeile von hinzugefügt D. Wenn Sie git cherry-pick Ein master, wendet es alle Änderungen von Abis Ein den masterZweig an, oder wendet es nur die Änderung von Dbis an E, nämlich fügt es nur diese 1 Zeile hinzu master? Wenn der Fall der erstere ist, wie erreiche ich den letzteren? (abgesehen vom manuellen Kopieren und Einfügen)
chharvey
7
git cherry-pick -n <commit> Wenn Sie nicht möchten, dass der Cherry-Pick automatisch festgeschrieben wird.
Ben Flynn
6
Wenn BranchA nicht auf eine Fernbedienung übertragen wurde, können Sie die Commits mit rebaseund dann einfach neu anordnen merge. Es ist vorzuziehen , zu verwenden mergeüber , rebasewenn möglich , weil es keine doppelten Commits schafft.
git checkout BranchA
git rebase -i HEAD~113
... reorder the commits so the 10 you want are first ...
git checkout BranchB
git merge [the 10th commit]
Die andere Möglichkeit, eingeführte Arbeiten von einem Zweig in einen anderen zu verschieben, besteht darin, sie auszuwählen. Ein Cherry-Pick in Git ist wie eine Rebase für ein einzelnes Commit. Es nimmt den Patch, der in einem Commit eingeführt wurde, und versucht, ihn erneut auf den Zweig anzuwenden, in dem Sie sich gerade befinden. Dies ist nützlich, wenn Sie mehrere Commits in einem Themenzweig haben und nur eines davon integrieren möchten, oder wenn Sie nur ein Commit in einem Themenzweig haben und es vorziehen, es auszuwählen, anstatt Rebase auszuführen. Angenommen, Sie haben ein Projekt, das folgendermaßen aussieht:
Wenn Sie Commit e43a6 in Ihren Hauptzweig ziehen möchten, können Sie ausführen
$ git cherry-pick e43a6
Finished one cherry-pick.
[master]: created a0a41a9: "More friendly message when locking the index fails."
3 files changed, 17 insertions(+), 3 deletions(-)
Dadurch wird dieselbe Änderung wie in e43a6 eingeführt, Sie erhalten jedoch einen neuen Commit-SHA-1-Wert, da das angewendete Datum unterschiedlich ist. Jetzt sieht deine Geschichte so aus:
Jetzt können Sie Ihren Themenzweig entfernen und die Commits löschen, die Sie nicht abrufen wollten.
Antworten:
Das
git cherry-pick <commit>
Befehl können Sie ein einzelnes Commit (von einem beliebigen Zweig) ausführen und es im Wesentlichen in Ihrem Arbeitszweig neu starten.Kapitel 5 des Pro Git-Buches erklärt es besser als ich kann , einschließlich Diagrammen und dergleichen. (( Das Kapitel über das Wiederherstellen ist auch gut zu lesen.)
Schließlich gibt es einige gute Kommentare zum Thema Kirschernte vs. Zusammenführen vs. Umbasieren in einer anderen SO-Frage .
quelle
A
abgezweigt vonmaster
und Sie tun einiges an Arbeit auf sie, die Schaffung Kind CommitsB
durchE
. Angenommen, es wurdeE
nur 1 Zeile von hinzugefügtD
. Wenn Siegit cherry-pick E
inmaster
, wendet es alle Änderungen vonA
bisE
in denmaster
Zweig an, oder wendet es nur die Änderung vonD
bis anE
, nämlich fügt es nur diese 1 Zeile hinzumaster
? Wenn der Fall der erstere ist, wie erreiche ich den letzteren? (abgesehen vom manuellen Kopieren und Einfügen)Wenn BranchA nicht auf eine Fernbedienung übertragen wurde, können Sie die Commits mit
rebase
und dann einfach neu anordnenmerge
. Es ist vorzuziehen , zu verwendenmerge
über ,rebase
wenn möglich , weil es keine doppelten Commits schafft.quelle
QUELLE: https://git-scm.com/book/en/v2/Distributed-Git-Maintaining-a-Project#Integrating-Contributed-Work
Die andere Möglichkeit, eingeführte Arbeiten von einem Zweig in einen anderen zu verschieben, besteht darin, sie auszuwählen. Ein Cherry-Pick in Git ist wie eine Rebase für ein einzelnes Commit. Es nimmt den Patch, der in einem Commit eingeführt wurde, und versucht, ihn erneut auf den Zweig anzuwenden, in dem Sie sich gerade befinden. Dies ist nützlich, wenn Sie mehrere Commits in einem Themenzweig haben und nur eines davon integrieren möchten, oder wenn Sie nur ein Commit in einem Themenzweig haben und es vorziehen, es auszuwählen, anstatt Rebase auszuführen. Angenommen, Sie haben ein Projekt, das folgendermaßen aussieht:
Wenn Sie Commit e43a6 in Ihren Hauptzweig ziehen möchten, können Sie ausführen
Dadurch wird dieselbe Änderung wie in e43a6 eingeführt, Sie erhalten jedoch einen neuen Commit-SHA-1-Wert, da das angewendete Datum unterschiedlich ist. Jetzt sieht deine Geschichte so aus:
Jetzt können Sie Ihren Themenzweig entfernen und die Commits löschen, die Sie nicht abrufen wollten.
quelle