使用 Git 挑选变更
- Tier: Free, Premium, Ultimate
- Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
使用 git cherry-pick 将特定提交的变更应用到当前工作分支。使用此命令可以:
- 将默认分支的错误修复回退到之前的发布分支。
- 将变更从 fork 分支复制到上游仓库。
- 应用特定变更而不合并整个分支。
你也可以使用 GitLab UI 来挑选变更。更多信息,请参阅 挑选变更。
请谨慎使用 git cherry-pick,因为它可能会创建重复的提交,并可能使你的项目历史变得复杂。
挑选单个提交
要将另一个分支中的单个提交挑选到当前工作分支:
-
切换到你想要挑选变更的目标分支:
git checkout your_branch -
确定你想要挑选的提交的 Secure Hash Algorithm (SHA)。要找到这个值,可以查看提交历史或使用
git log命令。例如:$ git log commit 0000011111222223333344444555556666677777 Merge: 88888999999 aaaaabbbbbb Author: [email protected] Date: Tue Aug 31 21:19:41 2021 +0000 -
使用
git cherry-pick命令。将<commit_sha>替换为你识别出的提交的 SHA:git cherry-pick <commit_sha>
Git 会将指定提交的变更应用到你的当前工作分支。如果有冲突,会显示通知。然后你可以解决冲突并继续挑选过程。
挑选多个提交
要将另一个分支中的多个提交挑选到当前工作分支:
-
切换到你想要挑选变更的目标分支:
git checkout your_branch -
确定你想要挑选的提交的 Secure Hash Algorithm (SHA)。要找到这个值,可以查看提交历史或使用
git log命令。例如:$ git log commit 0000011111222223333344444555556666677777 Merge: 88888999999 aaaaabbbbbb Author: [email protected] Date: Tue Aug 31 21:19:41 2021 +0000 -
对每个提交使用
git cherry-pick命令,将<commit_sha>替换为提交的 SHA:git cherry-pick <commit_sha_1> git cherry-pick <commit_sha_2> ...
或者,你可以使用 .. 符号来挑选一个范围内的提交:
git cherry-pick <start_commit_sha>..<end_commit_sha>这会将 <start_commit_sha> 和 <end_commit_sha> 之间的所有提交应用到你的当前工作分支。
挑选合并提交
挑选合并提交会将合并提交的变更应用到你的当前工作分支。
要将另一个分支中的合并提交挑选到当前工作分支:
-
切换到你想要挑选变更的目标分支:
git checkout your_branch -
确定你想要挑选的提交的 Secure Hash Algorithm (SHA)。要找到这个值,可以查看提交历史或使用
git log命令。例如:$ git log commit 0000011111222223333344444555556666677777 Merge: 88888999999 aaaaabbbbbb Author: [email protected] Date: Tue Aug 31 21:19:41 2021 +0000 -
使用带有
-m选项的git cherry-pick命令,以及你想要用作主线的父提交的索引。将<commit_sha>替换为合并提交的 SHA,将<parent_index>替换为父提交的索引。索引从1开始。例如:git cherry-pick -m 1 <merge-commit-hash>
这会配置 Git 使用第一个父提交作为主线。要使用第二个父提交作为主线,请使用 -m 2。
相关主题
故障排除
如果在挑选过程中遇到冲突:
-
手动解决受影响文件中的冲突。
-
暂存已解决的文件:
git add <resolved_file> -
继续挑选过程:
git cherry-pick --continue
要中止挑选过程并返回到之前的状态,请使用以下命令:
git cherry-pick --abort这会撤销在挑选过程中所做的任何更改。