如何挑选多个提交记录
如何挑选多个提交记录
技术背景
在使用Git进行版本控制时,有时我们并不想合并整个分支,而是只需要其中的部分提交记录。Git 1.7.2 引入了挑选一系列提交记录的功能,让我们可以更灵活地处理提交记录。
实现步骤
挑选从提交 A 到提交 B 的所有提交记录
若要挑选从提交 A 到提交 B(A 早于 B)的所有提交记录,可运行:
1 | |
若要忽略 A 本身,可运行:
1 | |
注意事项:
A应早于B,或者A应来自另一个分支。- 在 Windows 系统中,由于脱字符需要转义,应使用
A^^..B,或者使用双引号"A^..B"。 - 在
zshshell 中,由于脱字符是特殊字符,应使用单引号'A^..B'。
挑选单个提交记录
1 | |
示例:
1 | |
挑选多个提交记录
可以一次性挑选任意数量的提交记录,且可以按任意顺序挑选。它们将按指定顺序逐个应用。若出现冲突,需逐个解决,然后使用 git add my_file,完成后使用 git cherry-pick --continue 继续挑选过程。
1 | |
挑选提交记录范围
- 包含起始提交记录:
1 | |
- 不包含起始提交记录:
1 | |
注:commit~、commit~1 和 commit^ 都表示 “commit 的前一个提交记录”。
挑选同行的一系列提交记录到自己的分支
当同行的分支 peer_branch 是从自己分支 my_branch 的早期版本分叉出来时:
1 | |
核心代码
从提交 ID 到分支顶端挑选提交记录
1 | |
按顺序挑选从分支 b 到 f 的所有提交记录
1 | |
通过标准输入管道输入提交记录的 SHA 列表进行挑选
1 | |
最佳实践
简单的单提交记录挑选示例
从 “dev” 分支获取一个名为 “Remove Last Name field” 的提交记录,并提交到 “hotfix1” 分支:
1 | |
批量挑选多个提交记录
1 | |
常见问题
冲突问题
在挑选提交记录时,如果出现冲突,需要手动解决冲突。解决冲突后,使用 git add my_file 将解决冲突的文件添加到暂存区,然后使用 git cherry-pick --continue 继续挑选过程。
语法问题
在不同的系统和 shell 中,某些字符(如脱字符 ^)可能需要特殊处理。例如,在 Windows 系统中,可能需要使用 A^^..B 或 "A^..B";在 zsh shell 中,可能需要使用 'A^..B'。
如何挑选多个提交记录
https://119291.xyz/posts/how-to-cherry-pick-multiple-commits/