Das Kernstück, das Sie hier wollen, ist git add -p
( -p
ist ein Synonym für --patch
). Dies bietet eine interaktive Möglichkeit zum Einchecken von Inhalten, mit der Sie entscheiden können, ob jeder Hunk eingehen soll, und bei Bedarf können Sie den Patch sogar manuell bearbeiten.
So verwenden Sie es 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!
(Vielen Dank an Tim Henigan, der mich daran erinnert hat, dass git-cherry-pick die Option --no-commit hat, und an Felix Rabe, der darauf hingewiesen hat, dass Sie zurücksetzen müssen! Wenn Sie nur ein paar Dinge aus dem Commit herauslassen möchten , könnten Sie verwenden git reset <path>...
, um nur diese Dateien zu entfernen.)
Natürlich können Sie bei Bedarf bestimmte Pfade add -p
angeben. Wenn Sie mit einem Patch fängst könnten Sie die ersetzen cherry-pick
mit apply
.
Wenn Sie wirklich eine möchten git cherry-pick -p <commit>
(diese Option gibt es nicht), können Sie diese verwenden
git checkout -p <commit>
Dadurch wird das aktuelle Commit von dem von Ihnen angegebenen Commit unterschieden, und Sie können Hunks aus diesem Diff einzeln anwenden. Diese Option kann mehr sinnvoll , wenn der Commit Sie in hat merge Konflikte in einem Teil der du ziehen begehen Sie nicht interessiert sind (Beachten Sie jedoch, dass. checkout
Unterscheidet sich von cherry-pick
: checkout
Versuchen anwenden <commit>
‚s Inhalte vollständig, cherry-pick
gilt die Diff Dies bedeutet, dass checkout
mehr als nur dieses Commit angewendet werden kann, was möglicherweise mehr ist, als Sie möchten.)