Git:将更改应用于两个分支

bob*_*nto 4 git branch git-branch

我的存储库中有两个分支(出于此问题的目的):masterperformance_testing。我已收到该master分支机构的更改。我也需要把它们放进去performance_testing。我需要保持两个分支存在并分开,因此合并是不合适的。我想我可以在一个分支中引入更改并提交,然后在另一分支中执行相同的操作。但这似乎容易出错,我认为git可以通过某种方式更直接地做到这一点。我该怎么做呢?

msa*_*ord 5

在这种情况下,您通常会选择“ 樱桃采摘”,即只将一个分支的提交的子集应用于另一个分支。

例如,你有提交ABCDEFmaster和你想拿提交BCDperformance_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这是另一种选择,与其他分支机构管理一样,但如果没有非常具体的考虑,挑选樱桃应该能获得最大的收益。


Den*_*niz 5

最好的方法是为更改创建一个功能分支,并在最后将其合并到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 的优势在于,您将获得一个统一的日志,在两个分支上具有相同的提交哈希。