Das Wichtigste, was Sie hier brauchen, ist git add -p
( -p
ist ein Synonym für --patch
). Auf diese Weise können Sie interaktiv Inhalte hinzufügen und entscheiden, ob die einzelnen Teile hinzugefügt werden sollen oder nicht, und den Patch bei Bedarf sogar manuell bearbeiten.
Zur Verwendung in Kombination mit Cherry-Pick:
git cherry-pick -n <commit> # get your patch, but don't commit (-n = --no-commit)
git reset # unstage the changes from the cherry-picked commit
git add -p # make all your choices (add the changes you do want)
git commit # make the commit!
(Dank an Tim Henigan, der mich daran erinnert hat, dass git-cherry-pick
hat eine --no-commit
Option, und danke an Felix Rabe für den Hinweis, dass man die git reset
. Wenn Sie nur ein paar Dinge aus dem Commit herauslassen wollen, können Sie git reset <path>...
um nur diese Dateien freizugeben).
Sie können bestimmte Pfade zu add -p
falls erforderlich. Wenn Sie mit einem Patch beginnen, können Sie die cherry-pick
con apply
.
Wenn Sie wirklich wollen git cherry-pick -p <commit>
(diese Option gibt es nicht), können Sie
git checkout -p <commit>
Dadurch wird der aktuelle Commit mit dem von Ihnen angegebenen Commit verglichen und Sie können die Hunks aus diesem Vergleich einzeln anwenden. Diese Option ist nützlicher, wenn der Commit, den Sie heranziehen, Merge-Konflikte in einem Teil des Commits hat, an dem Sie nicht interessiert sind. (Beachten Sie jedoch, dass checkout
unterscheidet sich von cherry-pick
: checkout
versucht zu bewerben <commit>
Inhalt vollständig, während cherry-pick
wendet die Differenz zwischen dem angegebenen Commit und seinem Parent an. Dies bedeutet, dass checkout
kann mehr als nur diesen Commit anwenden, was vielleicht mehr ist, als Sie wollen.)