【问题标题】:Branch A overwriting Master Branch on merging git合并 git 时覆盖主分支的分支
【发布时间】:2014-10-23 11:37:37
【问题描述】:

我有一个文件,我们称之为文件 A。我在第一行输入了一些内容。然后我将它提交到 master 分支上。

现在我创建了另一个分支,我们称之为 BranchA。现在我打开文件删除我在第一行写的内容,在同一行输入其他内容并将其提交到 BranchA。

现在我 checkout 到 master 分支,然后将 BranchA 与 master 分支合并。合并成功完成,当我打开文件时,BranchA 上的行已经覆盖了主分支上的行。

为什么会发生这种情况不应该给我一个冲突,因为我在两个分支上更改同一行,然后尝试合并它们

【问题讨论】:

    标签: git github version-control merge


    【解决方案1】:

    您描述的场景是预期行为。

    据我了解您的问题,您的提交图可能如下所示:

    o---o <- master
         \
          o <- A
    

    如果您现在将 A 合并到 master 中,git 将执行 fast-forward 合并,这实际上只是更改了提交 master 指向的位置。
    由于 master 上没有与 A 不同的进一步更改,因此无需合并。


    现在假设我们有以下提交图:

    o---o---o <- master
         \
          o <- A
    

    在这种情况下,您的分支会发散。您在 master 上有更改,但不在 A 上,而您在 A 上有更改,但不在主服务器上。这是需要合并的典型情况。

    您可以查看 gitpro 书籍的 Basic Branching and Merging 章节,该章节涵盖了所有这些以及更多内容。

    【讨论】:

    • 你的意思是git没有合并两个提交,而是直接将提交从其他分支移动到主分支对吗?
    • Git 不会移动任何提交。在 git 中,分支只是特定提交的 reference。如果您在.git/refs/heads 中打开文件,您甚至可以查看它们。它们实际上是一个包含标识提交的 SHA1 密钥的文件。 Git 只是更改了这个引用。
    • 在 git 中,每个提交都会在其父提交(或父提交s,这定义了一个合并提交)上保存一个引用。这样你的历史就会建立起来。
    • aha 所以在这种情况下,git 只是将提交的引用从 BranchA 移动到主分支?
    • 没错。 Git 只是将 master 中的引用更改为指向与 A 相同的提交。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-14
    • 2012-12-18
    • 2017-02-26
    相关资源
    最近更新 更多