通过挑拣复制更改
Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019
Visual Studio 2019 | Visual Studio 2022
Git 挑拣将更改从一个或多个源分支提交复制到目标分支。 与合并或变基不同,通过挑拣可以选择特定的源分支提交。 对于挑拣的每个源分支提交,Git 会在目标分支上创建相应的提交。
可以挑拣以处理以下常见任务:
- 将特定功能从一个分支部署到另一个分支。
- 复制在错误分支上提交的工作。
- 对多个分支应用 bug 修复。
有关 Git 工作流的概述,请参阅 Azure Repos Git 教程。
挑拣提交
Azure Repos
Azure Repos 为挑拣提供了有限的支持,并且仅用于创建拉取请求以在目标分支上应用修补程序。 有关详细信息,请参阅改进 Azure DevOps 挑拣。
Azure Repos 中拉取请求菜单中的“挑拣”选项执行以下操作:
- 从拉取请求的目标分支创建新的主题分支。
- 将拉取请求的源分支中的所有更改挑拣到新的主题分支。
- 提示创建新的拉取请求,以将新的主题分支合并到另一个目标分支中。
有关分步教程,请参阅通过挑拣创建新的拉取请求。
GitHub
GitHub Web 界面不支持挑拣,但 GitHub Desktop 支持。 有关如何在 GitHub Desktop 中进行挑拣的分步指南,请参阅挑拣提交。
Visual Studio 2022 通过使用“Git”菜单、“Git 更改”和“解决方案资源管理器”中的上下文菜单提供 Git 版本控制体验。 Visual Studio 2019 版本 16.8 还提供了团队资源管理器 Git 用户界面。 有关详细信息,请参阅“Visual Studio 2019 - 团队资源管理器”选项卡。
选择“Git”>“管理分支”以打开“Git 存储库”窗口。
在“Git 存储库”窗口中,右键单击目标分支并选择“签出”。
在“分支”视图中,右键单击源分支,然后选择“查看历史记录”以打开提交“历史记录”选项卡。
在“历史记录”选项卡中,右键单击要挑拣的提交,然后选择“挑拣”。 Visual Studio 不支持一次挑拣多个提交,因此需要对要挑拣的每个提交重复此步骤。
Visual Studio 会创建一个新的目标分支提交,其中包含来自挑拣的提交的更改。 如果挑拣操作未成功完成,Visual Studio 将通知你。
Visual Studio 2019 版本 16.8 及更高版本提供 Git 版本控制体验,同时保留团队资源管理器 Git 用户界面。 要使用团队资源管理器,请从菜单栏中取消选中“工具”>“选项”>“预览功能”>“新 Git 用户体验”。 可以互换使用任一界面中的 Git 功能。
在团队资源管理器中,选择“主页”按钮并选择“分支”。
在“分支”视图中,右键单击目标分支,然后选择“签出”。
在“分支”视图中,右键单击源分支,然后选择“查看历史记录”以打开提交“历史记录”选项卡。
在“历史记录”选项卡中,右键单击要挑拣的提交,然后选择“挑拣”。 Visual Studio 不支持一次挑拣多个提交,因此需要对要挑拣的每个提交重复此步骤。
Visual Studio 会创建一个新的目标分支提交,其中包含来自挑拣的提交的更改。 如果挑拣操作未成功完成,Visual Studio 将通知你。
使用 git log
命令列出源分支提交。 --oneline
标志缩写了提交信息。
git log --oneline <source branch>
Git 首先列出最近的提交。 每个提交 ID 都是唯一标识提交的部分 SHA-1 哈希。 例如:
e745d06 (HEAD -> add-network-controller) Add a test initialization class
a89f48e (origin/add-network-controller) Add fiber optic transceiver test
31da50b Add network switch test
e74baa2 (origin/main, origin/HEAD, test-fiber-optic-transmitter, main) Add readme content
0c14391 Add readme file
32e3946 Add project files.
记下要挑拣的提交的 ID。
签出目标分支(如果尚未签出)。
git checkout <target branch>
提交、储藏或放弃任何未提交的更改。
若要挑拣单个提交:
git cherry-pick <commit ID>
若要挑拣多个提交,请使用空格分隔提交 ID。 系统将按照你输入提交的顺序应用提交:
git cherry-pick <commit1 ID> <commit2 ID> <commit3 ID>
若要选取非独占的提交范围,请使用^..
点范围表示法:
git cherry-pick <oldest-commit ID>^..<newest-commit ID>
挑拣多个提交时,默认的 cherry-pick 命令会创建一系列相应的新目标分支提交。 若要告知 Git 暂存而不提交目标分支更改,请使用 -n
标志:
git cherry-pick -n <commit1 ID> <commit2 ID>
然后,可以手动创建单个提交,以包含挑拣操作中的所有更改。
如果在挑拣操作期间存在合并冲突,Git 会通知你。 你可以解决冲突,然后运行 git cherry-pick --continue
,也可以运行 git cherry-pick --abort
来撤消挑拣操作。
后续步骤
相关文章