Ich habe einen Zweig von einem Repository in GitHub abgezweigt und etwas Bestimmtes für mich festgelegt. Jetzt fand ich das Original-Repository hatte ein gutes Feature, das war HEAD
.
Ich möchte es nur ohne vorherige Commits zusammenführen. Was sollte ich tun? Ich habe gewusst, wie man alle Commits zusammenführt:
git branch -b a-good-feature
git pull repository master
git checkout master
git merge a-good-feature
git commit -a
git push
"git cherry-pick
"sollte deine Antwort hier sein.
Wenden Sie die Änderung an, die durch ein bestehendes Commit eingeführt wurde.
Vergiss nicht zu lesen bdonlan's Antwort über die Konsequenz des Rosinenpickens in diesem Post:
"Ziehen Sie alle Commits von einem Zweig, drücken Sie angegebene Commits zu einem anderen", woher:
A-----B------C
\
\
D
wird:
A-----B------C
\
\
D-----C'
Das Problem bei diesem Commit besteht darin, dass git Commits als den gesamten Verlauf vor ihnen betrachtet
Wo C 'anders ist SHA-1
ICH WÜRDE.
Ebenso beinhaltet das Cherry-Picking eines Commits von einem Zweig zu einem anderen grundsätzlich das Generieren eines Patches und das anschließende Anwenden, wodurch die Historie ebenfalls verloren geht.
Diese Änderung der Commit-IDs unterbricht unter anderem die Verschmelzungsfunktion von git (obwohl es bei sparsamer Verwendung Heuristiken gibt, die darüber berichten).
Wichtiger jedoch, Es ignoriert funktionale Abhängigkeiten - wenn C tatsächlich eine in B definierte Funktion verwendet, werden Sie nie wissen.
Sie können git cherry-pick verwenden, um einen einzelnen Commit für sich selbst auf Ihren aktuellen Zweig anzuwenden.
Beispiel: git cherry-pick d42c389f
Lassen Sie uns versuchen, ein Beispiel zu nehmen und zu verstehen:
Ich habe eine Filiale, sag Meister, zeigt auf X <commit-id>, und ich habe einen neuen Zweig, der auf Y <sha1> zeigt.
Woher Y <commit-id> = <master> branch legt fest - wenige commits
Nun sagen wir für Y-Zweig, ich muss die Commits zwischen dem Master-Zweig und dem neuen Zweig schließen. Unten ist das Verfahren, dem wir folgen können:
Schritt 1:
git checkout -b local origin/new
wo local ist der Name der Niederlassung. Jeder Name kann angegeben werden.
Schritt 2:
git merge origin/master --no-ff --stat -v --log=300
Führen Sie die Commits vom Master-Zweig zum neuen Zweig zusammen und erstellen Sie auch ein Zusammenführungs-Commit der Protokollnachricht mit einzeiligen Beschreibungen aus höchstens <n> tatsächlichen Commits, die zusammengeführt werden.
Weitere Informationen und Parameter zu Git merge finden Sie unter:
git merge --help
Wenn Sie ein bestimmtes Commit zusammenführen müssen, können Sie Folgendes verwenden:
git cherry-pick <commit-id>