Git:将提交的一部分应用于另一个分支

63

我如何将一个分支中的部分提交应用到另一个分支?我知道我可以使用cherry-pick来选择一个提交,但我需要更进一步,“挑选”该提交引入的某些更改并将它们应用于另一个(目标)分支。

有没有一种干净的方法来实现这一点,或者我应该只应用整个提交,手动撤消一些块,并记住在将来创建更多原子提交?


3
可能是 partly cherry-picking a commit with git 的重复问题。 - jweyrich
2个回答

92

git cherry-pick -n <SHA> 命令会暂存更改,但不会提交。之后您可以使用 git reset -p 命令来取消暂存您不需要的部分,或者使用 git reset HEADgit add -p 命令只暂存您想要的更改。


1
应用 'git cherry-pick -n <SHA>' 命令,然后输入 git status,还会提供有关如何撤消所选取的提交文件的说明,以便您进行重置。 - Simeon

16

如果要应用的部分可以通过路径指定(即您不希望指定一个文件中的行块),则可能存在另一种解决方案。

一种方法是从提交中形成补丁,然后将其应用到您的分支。

在您想要修改的分支已检出的情况下:

git show <SHA> -- <relevant paths> | git apply

将提交SHA中的任何更改,在相关路径中应用到您当前的工作副本。


2
我尝试了这个,但所有行都显示“补丁不适用”。 - Andy Ray

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接