我在 2 个不同的分支上工作:发布 和开发。
我注意到我仍然需要将提交给 release 分支的一些更改集成回 development 分支。
问题是我不需要所有的提交,只需要某些文件中的一些大块头,所以一个简单的
git cherry-pick bc66559
不成功。
当我做一个
git show bc66559
我可以看到差异,但真的不知道将其部分应用到我当前工作树的好方法。
最佳答案
你在这里想要的核心是git add -p
( -p
是 --patch
的同义词)。这提供了一种添加内容的交互式方式,让您决定每个大块是否应该进入,甚至可以让您在必要时手动编辑补丁。
与 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!
(感谢 Tim Henigan 提醒我 git-cherry-pick
有一个 --no-commit
选项,感谢 Felix Rabe 指出你需要 git reset
。如果你只想留下一些东西提交,您可以使用 git reset <path>...
取消暂存这些文件。)
您可以提供到 add -p
的特定路径如有必要。如果您从补丁开始,您可以替换 cherry-pick
与 apply
.
如果你真的想git cherry-pick -p <commit>
(该选项不存在),您可以使用
git checkout -p <commit>
这会将当前提交与您指定的提交进行比较,并允许您单独应用该差异中的 block 。如果您正在 pull 入的提交在您不感兴趣的部分提交中存在 merge 冲突,则此选项可能更有用。(但是请注意,checkout
与 cherry-pick
不同:checkout
尝试应用<commit>
的全部内容,而 cherry-pick
应用指定提交与其父项的差异。这意味着 checkout
可以应用的不仅仅是该提交,这可能比您想要的更多。)
关于git - 使用 Git 部分挑选提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1526044/