bob*_*nto 4 git branch git-branch
我的存储库中有两个分支(出于此问题的目的):master和performance_testing。我已收到该master分支机构的更改。我也需要把它们放进去performance_testing。我需要保持两个分支存在并分开,因此合并是不合适的。我想我可以在一个分支中引入更改并提交,然后在另一分支中执行相同的操作。但这似乎容易出错,我认为git可以通过某种方式更直接地做到这一点。我该怎么做呢?
在这种情况下,您通常会选择“ 樱桃采摘”,即只将一个分支的提交的子集应用于另一个分支。
例如,你有提交A,B,C,D,E,F在master和你想拿提交B,C并D为performance_testing:
git checkout performance_testing
git cherry-pick B^..D
Run Code Online (Sandbox Code Playgroud)
或者,您可以在多个单独的Cherry-pick命令中列出单个提交。当您不必连续进行一系列提交时,这很有用。例如:
git cherry-pick B D
Run Code Online (Sandbox Code Playgroud)
请注意,历史记录中B 在 D 之前。
有关更多详细信息,请参见:如何挑选多个提交(其中还包括一些我不会深入研究此答案的出色图表)。
是的,有许多不同的选项可供选择。这是一个基本且通用的解决方案,读者了解了它的工作原理后就可以选择应用。git rebase --onto这是另一种选择,与其他分支机构管理一样,但如果没有非常具体的考虑,挑选樱桃应该能获得最大的收益。
最好的方法是为更改创建一个功能分支,并在最后将其合并到master和 中performance_testing。樱桃采摘被认为是一种反模式。
要创建特征分支,首先要找到 2 个分支的最新共同祖先:
git merge-base master performance_testing
Run Code Online (Sandbox Code Playgroud)
然后feature_branch使用上一个命令的输出创建:
git branch feature_branch <output of merge-base command>
Run Code Online (Sandbox Code Playgroud)
切换到feature_branch分支,进行更改并在最后将其合并到master和 中performance_testing。
如果您在 2 个分支中更改了相同的文件,则会发生冲突。这是不可避免的,即使是挑选樱桃,但很容易解决。
这种方法相对于cherry-picking 的优势在于,您将获得一个统一的日志,在两个分支上具有相同的提交哈希。