【问题标题】:Differences between 2 branches after merge: GIT合并后2个分支的区别:GIT
【发布时间】:2015-05-26 13:45:51
【问题描述】:

我目前正在开发名为 NC12-changePassword 的第二个分支。

对处理字符串解密的master 分支进行了更改。我需要这些新更改才能在我的分支上实现新功能,因此我合并了这些更改。

我做了一个 git pull 并且没有冲突。当我运行git log 时,它会显示合并提交。此外,当我运行git merge master 时,它会告诉我一切都是最新的。

但是我的代码不起作用,当我运行 git diff NC12-changePassword master 时,它会列出 master 中没有 NC12-changePassword 的内容。这对我来说没有意义,因为我已经合并了更改,因此 master 中的所有内容都应该在 NC12-changePassword 中。

我的理解是我的分支应该像master 一样运行,并且代码应该可以正常工作。或者我错过了什么:-\ .

【问题讨论】:

    标签: git version-control merge git-diff


    【解决方案1】:

    因此 master 中的所有内容都应该在 NC12-changePassword 中

    这不是“合并”的意思,因此git merge 也不是。

    让我们举一个非常简单的例子来说明。假设您从 master 创建了一个分支,并且作为该分支的一部分甚至全部,您删除了一段代码并提交了结果。

    然后,在您完成此操作后,假设 Fred 修改 master 以添加第二个代码块(可能完全在不同的文件中),只有在第一个代码块存在时才会做一些有用的事情。他将其提交给master

    稍后,您在 master 中获得 Fred 的工作,并使用 git merge 将 his-changes-to-master 引入您的分支。 Git不会放回你删除的代码:它假设你知道你当时在做什么。它所要做的就是发现 Fred 添加了一个 new 代码块,它会将同一个代码块添加到您的分支中,在那里它什么也不做,因为它取决于您删除的代码块。

    如果您现在将您的分支与 Fred 的 master 进行比较,您仍然会有一个已删除的代码块:您删除的块。你不会拥有master 中的所有内容。 (您自己的 master 可能也不会有 Fred 的更改,因为在上面,我们从未提到您进入 您的 master 并从他的 master 中引入他的更改。 )

    在复杂的情况下,你必须使用自己的知识(总是超过 git 的知识)来修复语义上不正确的合并。 Git 最多会注意到语法冲突,例如:“嘿,你删除了这段代码,但 Fred 对同一块进行了更改,所以由于我,git,对语义一无所知,你必须解决这个问题冲突”。但这只有在你有幸遇到句法冲突时才会发生。如果 Fred 的更改“适应”了您的更改,但由于您的更改而没有执行任何操作,那么 git 甚至不会注意到这一点。

    【讨论】:

    • 感谢您的解释。很有帮助。
    猜你喜欢
    • 2015-07-19
    • 2011-03-25
    • 1970-01-01
    • 1970-01-01
    • 2016-02-06
    • 2012-03-12
    • 2012-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多