介绍
应用一些已存在的提交所引入的更改
名词&符号解释
commit-hashgit 为每次提交生成的哈希值,是一个由40个字符组成的十六进制字符串,一般取前5位就可以。^它可以与 commit hash 或分支名一起使用,以指定要操作的提交或一系列提交<commit-hash>^: 表示指定提交的父提交<branch-name>^: 表示指定分支最新提交的父提交^<branch-name>: 表示排除特定提交及其祖先
..表示两个 commit 之间的所有提交,例如:371c2..971209~用于指定提交的相对位置或偏移量~1: 表示当前提交的父提交~2: 表示当前提交的祖父提交
选项
-e, --edit编辑提交说明-n, --no-commit不要自动提交--ff允许快进合并-x包含原始提交的引用
序列命令
--continue继续操作--abort取消操作,回到操作前的样子--skip跳过当前提交--quit退出操作,会保留已经cherry-pick成功的 commit
序列命令只适用于正在进行的 cherry-pick 序列,而不适用于单个提交的 cherry-pick 操作
适用场景
场景一: 提取特定提交
对项目做优化需求开发时,在开发未完成时,其中一个优化项需要紧急上线,这时候就需要把这个优化项对应的 commit 提取出来,单独处理
场景二: 干净的提交记录
- 在需求开发中,总会存在添加调试代码的场景,会产生一些无用的提交记录。我们可以将有用的提交提取出来,生成一个干净提交记录的分支
- 当前的开发分支被污染了,比如合并了其他人的分支,这时就可以新建一个开发分支,从旧的开发分支中提取自己的 commit
操作单个提交
- 切换到需要合并的分支
git switch <branch-name>
- 提取指定的提交
git cherry-pick <commit-hash>
<commit-hash>是要合并的提交的哈希值。可以在其他分支中使用git log命令查看提交的哈希值- 当执行完之后,将会自动生成一个新的 commit 进行提交,也就是会有一个新的 commit hash
其他命令
# 操作指定分支的最新提交
git cherry-pick <branch-name>
# 操作指定分支的最新提交的父提交
git cherry-pick <branch-name>^
操作多个提交
git cherry-pick <commit-hash1> <commit-hash2> ...
当执行完 cherry-pick 之后,会按照指定顺序生产新的多个提交记录
操作连续多个提交
git cherry-pick <start-commit>..<end-commit>
可以看到,它的范围就是 start-commit 到 end-commit 之间所有的 commit,但是它这是一个 [左开,右闭] 的区间,也就是说,它将不会包含 start-commit。
而如果想要包含 start-commit 的话,就需要使用 ^ 标记一下,就会变成一个 [左闭,右闭] 的区间,具体命令如下:
git cherry-pick <start-commit>^..<end-commit>
其实 <start-commit>^ 可以理解为 start-commit 的父提交。
注意事项
- 无论是对单个 commit 进行 cherry-pick ,还是批量处理,注意一定要根据时间线,依照 commit 的先后顺序来处理,否则会有意想不到的问题