我有一个名为 BranchA
的分支,它比 BranchB
多了 113 个提交。
但是我只想将 BranchA
中最后大约10个提交合并到 BranchB
中。
有没有方法可以做到这一点?
git cherry-pick <commit>
命令允许您获取一个单独的提交(来自任何分支),并在工作分支中“重新定位”它。详见《Pro Git》第五章,其中包括图表等更好的解释。(有关变基的章节也是不错的阅读材料) 最后,另一个SO问题的评论中对挑选、合并和变基进行了很好的讨论。master
分支创建了提交A
,并在其上进行了一些工作,创建了子提交B
到E
。假设E
只添加了1行代码。如果您将git cherry-pick E
应用到master
中,它会将A
到E
的所有更改应用到master
分支中,还是仅将D
到E
的更改应用到master
分支中,即仅将那1行代码添加到master
中?如果是前者,我该如何实现后者?(除了手动复制和粘贴) - chharvey来源: https://git-scm.com/book/zh/v2/Git-分布式-Git-项目管理#集成他人的工作
将引入的工作从一个分支移动到另一个分支的另一种方法是 cherry-pick。在 Git 中,cherry-pick 就像单个提交的 rebase 一样。它获取引入的补丁并尝试将其重新应用于当前所在的分支。如果您在一个主题分支上有多个提交,并且只想集成其中一个,则此方法很有用;或者如果您在一个主题分支上只有一个提交,并且您更喜欢 cherry-pick 而不是运行 rebase,则此方法也很有用。例如,假设您有一个项目如下:
如果你想将提交记录 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(-)
如果 BranchA 还没有被推送到远程,则可以使用 rebase
重新排序提交,然后简单地使用 merge
。尽可能使用 merge
而不是 rebase
更好,因为它不会创建重复的提交。
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]