2011-06-16 103 views

回答

194

git cherry-pick <commit>命令允许您从任何分支中进行单次提交,并且实质上在您的工作分支中重新绑定它。

Chapter 5 of the Pro Git book explains it better than I can,完整的图和等;查找标题为“重新激活和樱桃采摘工作流程”的部分。 (The chapter on Rebasing也是不错的阅读。)

最后,还有一些good comments on the cherry-picking vs merging vs rebasing in another SO question

+0

问题:说commit'A'从'master'分支出来,你做了一些工作,通过'E'创建子提交'B'。说'E'只有'D'加了1行。如果你把'E'樱花选到''master',它是否应用*所有*从'A'到'E'到'master'分支的变化,或者它只会*应用从'D'变化到'E',即它只增加了1行到'master'?如果是前者,我如何实现后者? (除了手动复制和粘贴) – chharvey 2014-03-25 10:44:31

+4

git cherry-pick -n 如果你不想让樱桃挑选自动提交。 – 2015-06-19 18:09:59

5

如果BranchA未被推送到远程,那么您可以使用rebase然后简单merge来重新排序提交。如果可能,最好在之上使用merge,因为它不会创建重复的提交。

git checkout BranchA 
git rebase -i HEAD~113 
... reorder the commits so the 10 you want are first ... 
git checkout BranchB 
git merge [the 10th commit] 
2

来源:https://git-scm.com/book/en/v2/Distributed-Git-Maintaining-a-Project#Integrating-Contributed-Work

的另一种方式从一个分支移动介绍工作,另一个是樱桃采摘它。 Git中的樱桃选择就像是一次单一提交的变形。它需要在提交中引入的修补程序,并尝试将其重新应用到当前所在的分支上。如果您在主题分支上有多个提交,并且您只想集成其中一个,或者您只在主题分支上提交了一个提交,并且您更愿意挑选它而不是运行rebase,那么这非常有用。例如,假设你有一个项目,看起来像这样:

enter image description here

如果你想拉提交e43a6到你的主分支,你可以运行

$ git cherry-pick e43a6 
Finished one cherry-pick. 
[master]: created a0a41a9: "More friendly message when locking the index fails." 
3 files changed, 17 insertions(+), 3 deletions(-) 

这拉引入了相同的变化在e43a6中,但您会得到一个新的提交SHA-1值,因为应用的日期不同。现在你的历史看起来是这样的:

enter image description here

现在你可以删除你的主题分支,放弃你不想在拉提交的

相关问题