如何挑选单个提交、多个提交或一系列提交
...到您当前签出的分支:
1。挑选一个 single 分支或提交名为 commit
git cherry-pick commit
例子:
git cherry-pick my_branch # by branch name
git cherry-pick 1e038f108a130831f108329b1083a8139813fabc # by full hash
git cherry-pick 1e038f10 # by partial hash
2。挑选多个提交
请注意,您可以一次挑选任意数量的提交哈希,并且按您想要的任何顺序。它们将被简单地应用一个时间,并按照您指定的顺序。如果出现任何冲突,您必须一次解决一个,然后使用git add my_file,然后在完成后使用git cherry-pick --continue 以继续挑选过程。
git cherry-pick commit1 commit2 commit3 commit4 commit5
3。挑选一个范围的提交
我最初是从most-upvoted answer by @Eric Darchis here 那里学到了这种风格的基础知识。
请注意,要挑选一个范围的提交,您必须指定一个开始和结束提交哈希,在它们之间加上..。但是,在一系列提交中,不包括开始提交。因此,要包含它,您必须在开始提交之前指定提交。指定 preceding 提交的语法是将 ~、~1 或 ^ 放在您的提交之后 ,如:beginning_commit~,这意味着: "beginning_commit 之前的提交"。
# A. INCLUDING the beginning_commit
git cherry-pick beginning_commit~..ending_commit
# OR (same as above)
git cherry-pick beginning_commit~1..ending_commit
# OR (same as above)
git cherry-pick beginning_commit^..ending_commit
# B. NOT including the beginning_commit
git cherry-pick beginning_commit..ending_commit
注意: commit~、commit~1 和 commit^ 都表示“一个提交在 commit”之前,或者说:“提交在commit"之前。
要在 commit 之前指定 两个 提交,您可以使用如下语法:
commit~~
commit~2 # my preferred syntax
commit^^
要在 commit 之前指定 三个 提交,您可以这样做:
commit~~~
commit~3 # my preferred syntax
commit^^^
这不起作用:
commit^3 # INVALID syntax
要自己测试上述“以前的提交语法”概念,最简单的方法是使用git log 命令。例如:
git log commit
git log commit~
git log commit~1
git log commit^
git log commit~~
git log commit~5
# etc.
走得更远
还有一点需要了解:git rebase 只是一堆连续的git cherry-picks。请在此处查看我的其他答案 (Who is "us" and who is "them" according to Git?),其中我展示了我制作的关于 git rebase 的工作原理及其作用的 ASCII 绘图。