`Git merge-X之后的Git-rebase冲突`

`Git merge-X之后的Git-rebase冲突`,git,github,merge,Git,Github,Merge,我在分支foo上,我想将development合并到我的功能分支foo。我希望自动解决所有冲突,并自动重写分支foo中的任何代码。从分支foo,我做了git merge-X他们的开发,这是可行的。当进行两次双重检查时,我得到的已经是最新的 但是当我git-rebase-develope以确保foo被捕获时,我会遇到合并冲突。为什么在git merge-X他们的develope合并应该有分支foo上所有更新的develope代码时会出现这种情况?重新基础和合并做了非常不同的事情 当您运行git m

我在分支
foo
上,我想将
development
合并到我的功能分支
foo
。我希望自动解决所有冲突,并自动重写分支
foo
中的任何代码。从分支
foo
,我做了
git merge-X他们的开发
,这是可行的。当进行两次双重检查时,我得到的
已经是最新的


但是当我
git-rebase-develope
以确保
foo
被捕获时,我会遇到合并冲突。为什么在
git merge-X他们的develope
合并应该有分支
foo
上所有更新的
develope
代码时会出现这种情况?

重新基础和合并做了非常不同的事情

当您运行
git merge develope
时,您告诉git:

  • 识别当前提交(
    HEAD
    )。这有一些散列ID
  • 确定另一个提交,
    开发
    。这有一些散列ID
  • 跟踪提交图以查找步骤1和2中标识的两个提交中最低的公共祖先合并基提交:

    ...--o--B--o--1   <-- somebranch (HEAD)
             \
              o--o--2   <-- develop
    
  • 如果现在再次运行相同的
    git merge
    ,git会找到
    M
    2
    ,找到它们的合并基(这次不是
    B
    ,而是
    2
    ),并声明无需执行任何操作:合并基已经是两个提交之一

    运行
    git-rebase-develope
    时,您告诉git:

  • 列出当前分支提示中可访问的所有提交(
    M
    ,在此合并完成后),以及通过
    develope
    (提交2)标识的提交无法访问的所有提交:

  • 成功创建所有副本(包括解决任何合并冲突)后,将
    somebranch
    标签从现在的位置移除,并将其放置在复制提交的末尾:

    ...--o--B--o--1---M   [abandoned]
             \       /
              o--o--2   <-- develop
                     \
                      o'--1'   <-- somebranch (HEAD)
    
    …--o--B--o--1--M[废弃]
    \       /
    
    o--o--2重新设置基址和合并可以做非常不同的事情

    当您运行
    git merge develope
    时,您告诉git:

  • 识别当前提交(
    HEAD
    )。这有一些散列ID
  • 确定另一个提交,
    开发
    。这有一些散列ID
  • 跟踪提交图以查找步骤1和2中标识的两个提交中最低的公共祖先合并基提交:

    ...--o--B--o--1   <-- somebranch (HEAD)
             \
              o--o--2   <-- develop
    
  • 如果现在再次运行相同的
    git merge
    ,git会找到
    M
    2
    ,找到它们的合并基(这次不是
    B
    ,而是
    2
    ),并声明无需执行任何操作:合并基已经是两个提交之一

    运行
    git-rebase-develope
    时,您告诉git:

  • 列出当前分支提示中可访问的所有提交(
    M
    ,在此合并完成后),以及通过
    develope
    (提交2)标识的提交无法访问的所有提交:

  • 成功创建所有副本(包括解决任何合并冲突)后,将
    somebranch
    标签从现在的位置移除,并将其放置在复制提交的末尾:

    ...--o--B--o--1---M   [abandoned]
             \       /
              o--o--2   <-- develop
                     \
                      o'--1'   <-- somebranch (HEAD)
    
    …--o--B--o--1--M[废弃]
    \       /
    
    o--o--2如果您已经将
    develope
    合并到
    foo
    ,那么后续执行
    git-rebase-develope
    “以确保
    foo
    被赶上”毫无意义。进行这种合并的全部意义在于它捕获了
    foo
    。如果您已经将
    develope
    合并到
    foo
    ,那么后续执行
    git-rebase-develope
    “确保
    foo
    被捕获”是没有意义的。这样一个合并的全部意义在于它捕获了
    foo
    。明确指出复制重基本身就是一个合并,使用重基提交的父级作为合并基,重基提交作为“他们的”提示,新基作为“我们的”提示,这会有帮助吗?@jthill:可能。。。我有时会对过长的答案感到有些抵触,所以我想知道:-)明确指出复制重基本身就是一个合并,使用重基提交的父级作为合并基,重基提交作为“他们的”提示,新基作为“我们的”提示,这会有帮助吗?@jthill:可能。。。我有时会对过长的答案感到有些抵触,所以我想:-)
    ...--o--B--o--1---M   [abandoned]
             \       /
              o--o--2   <-- develop
                     \
                      o'--1'   <-- somebranch (HEAD)