Git:从之前的分支再次合并

时间:2018-05-08 07:13:40

标签: git git-merge

是否可以从先前的分支合并并解决与当前分支的冲突?

我有一个场景,其中一位同事无法访问我们的远程存储库,因此不得不对项目副本中的文件进行更改。我现在希望将这些文件合并到一个新的分支中回到项目中;但是,这些文件也有其他工作。

我考虑过从最新的主人那里分出来,用同事的工作来破坏新分支中的旧文件,然后从前一个分支的负责人重新出现。理想情况下,我能够通过手动确认冲突。这将有一个类似的结构:

           o-------o-------o-------o
          /               /         \
         /               /           \
--------o---------------+-------------o----->

在我想要从这里合并到新分支的+处原始分支没有变化。

当我从原始分支尝试合并时,我得到"所有文件都是最新的"。

编辑: 编辑的实际结构与上图略有不同,它更接近:

------A-----B--------+---->   dev branch
      |      \        \
      |       B'---C`--D-->   new branch with changes
      |
      A`----C                 changes made outside Git

其中A`是A项目的副本,B是我在Git中做出的改变,C是我的同事在Git之外做出的改变,而C`是分支的状态,一旦我'已经复制了他的更改.D是从我希望选择冲突的原始分支返回的合并。

但是,我没有改变,而是D,而不是D。我相信这可能是因为复制时分支的状态是B,因此Git只是将新文件视为一组简单的添加和删除,没有什么难以自动解决。

2 个答案:

答案 0 :(得分:2)

以下是要遵循的程序:

  1. 拉主分支(主)。
  2. 从主分支创建一个新分支。
  3. 将您的朋友更改或代码复制到新分支。
  4. 添加并提交这些更改。
  5. 现在用master分支重新分支你的分支,所以现在你将获得所有分支 从主人到你的分支的变化。
  6. 现在你应该解决冲突,如果你得到任何冲突。
  7. 解决冲突后,添加文件并继续使用rebase。
  8. 现在,您将获得朋友的更改和最新的mainbranch代码 你的代码。
  9. 然后您可以将代码推送到新分支。
  10. 以下是所有步骤的代码:

    1. git pull origin master

    2. git checkout -b friend_changes

    3. 将更改从其他文件夹复制到此

    4. git add -A; git commit -m "Firend changes"

    5. git rebase -i master

    6. 解决冲突(如果有)

    7. git add . ; git rebase --continue

    8. 现在您已完成所有更改

    9. git push origin friend_changes

    10. Documentation for git rebase

      Another reference

答案 1 :(得分:0)

我找到了解决我的潜在问题的方法,不一定是我想要的实际机制,但它是一个解决方案。

问题在于,当我为外部更改创建分支时,我已经创建了一些代码。 Git将新代码的更改顺序视为A---B---C,其中实际为A----C。但是合并时的更改顺序看起来像A---B---C---B(而不是A---C---B应该触发冲突解决),因此Git非常乐意将BCB解析为BC。

但实际上我并没有从原始开发分支的负责人那里分支出来。相反,在我将副本发送给他之前,我从最后一次提交到开发分支创建了新分支,并将他的更改复制到此分支中,之后从开发分支合并将正确地进行更改。

-----A---B-----+--->
     :\         \
     : A`---C`---D-->
     :
     A`---C

事实上,我甚至不需要解决冲突,Git自动想出了一个。

相关问题