【问题标题】:How to merge commits from branches in specific order如何按特定顺序合并来自分支的提交
【发布时间】:2017-05-19 21:21:08
【问题描述】:

我有一个以c1 作为头部提交的 git 存储库。由于我必须同时处理两个功能,我必须创建一个分支 (my branch)。我一直致力于main branch 中的一个功能及其子功能以及my branch 中的另一个功能。这就是我的本地仓库的样子。

c0->c1->c3->c4->c5->c6 (main branch)
    \
     c2 (my branch)

来自main branch 的所有新提交都已推送到远程仓库。现在功能c2 已经完成,它必须与main branch 合并。这就是我的本地仓库的样子。

c0->c1->c3->c4->c5->c6->c2

如何获得这个结构? git cherry-pick c2 引发合并冲突失败。

【问题讨论】:

  • 您是否尝试解决这些合并冲突?给你所说的你想要的,我认为你别无选择。
  • 我比较担心订单。樱桃挑选会确保c2在c6之后吗?还是会尝试在c1和c2之间输入?

标签: git github version-control merge


【解决方案1】:

如果有超过 1 个提交,你最好使用 rebase,而不是cherry-pick:

git rebase c1 c2 --onto main_branch

当然,冲突仍然可能发生。在变基期间解决它们; git 在冲突停止时打印帮助。

【讨论】:

    【解决方案2】:

    照顾好冲突,你应该会没事的。冲突是我们工作的一部分。例如,如果您尝试合并,也会发生同样的事情。

    【讨论】:

    • 订单呢?如果我解决冲突,c2 会在 c5 之后吗?
    • 我猜你会在 主分支 上工作(目前在 c6 上),你会挑选 c2。这将带来 c2 之后 c6。例如,它 像 git 分析创建 c2 的时间以神奇地将其插入 c3 之前。它会将 c2 放在 c6 之上。从技术上讲,它并不是真正的 c2,它是 c2 的 等价物(在周围的文档中通常称为 c2')。它将保持与 c2 相同的作者,但提交者将是挑选的人。
    • ...它与 c2 完全不同。
    【解决方案3】:

    通常你使用git merge...

    在主人身上:

    git merge c2
    

    然后您在合并时解决冲突。考虑到c2 在历史上的历史,根据c2 所触及的内容,可能会发生冲突。

    【讨论】:

      【解决方案4】:

      如下解决:

      git checkout my_branch
      git rebase master
      <resolve any conflicts>
      git checkout master
      git merge my_branch
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-11-18
        • 1970-01-01
        • 2018-04-26
        • 1970-01-01
        • 2014-01-22
        • 2018-08-13
        • 2021-10-16
        • 1970-01-01
        相关资源
        最近更新 更多