git cherry-pick
1. 什么是 cherry-pick?
cherry-pick 是 Git 中的一个命令,用于将某个特定的提交(commit)从一个分支复制到另一个分支。它不会合并整个分支,而是“挑选”某次提交的内容,应用到当前分支。这就像“挑樱桃”一样,只选你想要的那颗提交。
2. 适用场景
- 你在
dev分支修复了一个 bug,但此时master分支也需要这个修复,而不是整个dev的内容。 - 某个 feature 分支有一项改动,其他分支也需要,但不希望合并 feature 分支的所有提交。
- 多人协作时,临时将某人的提交迁移到其他分支。
3. 使用方法
基本命令
git cherry-pick <commit-hash>
其中 <commit-hash> 是你想要应用的那个提交的 SHA 值。
示例流程
假如你在 feature 分支有如下提交历史:
A - B - C - D
你现在在 main 分支,想把 C 这个提交应用到 main:
git checkout main
git cherry-pick <C的commit-hash>
这样,C 的内容就会被复制到 main 分支,并且会生成一个新的提交(hash不同,但内容一样)。
4. cherry-pick 多个提交
可以一次性选择多个提交:
git cherry-pick <commit1> <commit2> <commit3>
或者选择一个范围:
git cherry-pick <commitA>^..<commitB>
这会把 commitA 到 commitB(包括 commitB,不包括 commitA^)之间的所有提交都“挑”过来。
5. 冲突处理
如果 cherry-pick 的过程中遇到冲突,Git 会提示你解决冲突。解决冲突后,使用:
git add .
git cherry-pick --continue
如果想放弃这次 cherry-pick:
git cherry-pick --abort
6. 注意事项
- cherry-pick 会生成新的 commit,和原来的 hash 不同,但内容一样。
- 频繁使用 cherry-pick 可能导致分支历史混乱,建议只在确实需要“单独挑选”时使用。
- cherry-pick 只能挑选已经提交(commit)的内容,不能挑选未提交的变更。
7. 总结
cherry-pick 是 Git 中非常实用的命令,让你可以灵活地迁移某些特定的改动到其它分支,适用于补丁、bug 修复等场景,但应谨慎使用。
