小编典典

如何将提交从一个分支复制到另一个分支?

all

我的主人有两个分支:

  • v2.1 :(版本2)我已经工作了几个月
  • wss :我昨天创建的用于向我的主人添加一个特定功能(在生产中)

有没有办法将昨天的提交从 wss 复制到 v2.1?


阅读 98

收藏
2022-02-28

共1个答案

小编典典

你真的应该有一个工作流程,让你通过合并来完成这一切:

- x - x - x (v2) - x - x - x (v2.1)
           \
            x - x - x (wss)

所以你所要做的就是git checkout v2.1git merge wss。如果由于某种原因你真的不能这样做,并且你不能使用git
rebase
将你的 wss
分支移动到正确的位置,那么从某个地方获取单个提交并将其应用到其他地方的命令是git cherry-
pick
。只需检查要应用它的分支,然后运行git cherry-pick <SHA of commit to cherry-pick>​​.

变基可能会为您节省的一些方法:

如果您的历史记录如下所示:

- x - x - x (v2) - x - x - x (v2.1)
           \
            x - x - x (v2-only) - x - x - x (wss)

您可以使用git rebase --onto v2 v2-only wss将 wss 直接移动到 v2 上:

- x - x - x (v2) - x - x - x (v2.1)
          |\
          |  x - x - x (v2-only)
           \
             x - x - x (wss)

然后就可以合并了!如果您真的,真的, 真的 无法达到可以合并的地步,您仍然可以使用 rebase 一次有效地做几个樱桃挑选:

# wss-starting-point is the SHA1/branch immediately before the first commit to rebase
git branch wss-to-rebase wss
git rebase --onto v2.1 wss-starting-point wss-to-rebase
git checkout v2.1
git merge wss-to-rebase

注意:这样做需要一些额外工作的原因是它在您的存储库中创建了重复的提交。这真的不是一件好事 -
简单分支和合并的全部意义在于能够通过在一个地方提交并将它们合并到需要它们的任何地方来完成所有事情。重复提交意味着永远不会合并这两个分支的意图(如果您决定稍后再合并,则会发生冲突)。

2022-02-28