合并后2个分支之间的差异:GIT

时间:2015-05-26 13:45:52

标签: git version-control merge git-diff

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

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

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

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

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

1 个答案:

答案 0 :(得分:3)

  

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

那不是"合并"意味着,而不是git merge所做的事。

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

然后,在您完成此操作之后,假设Fred修改master以添加第二个代码块 - 可能完全在另一个文件中 - 只有在第一个代码块存在时才会执行某些操作。他将此提交给master

稍后,您将获得Fred在master中的工作,并使用git merge将他的更改更改为您的分支。 Git将放回您删除的代码:它假设您知道自己在做什么。它所做的就是发现Fred添加了一个 new 代码块,并且它会将相同的块添加到您的分支中,它不执行任何操作,因为它取决于您删除的块。

如果您现在将您的分支与Fred master进行比较,您仍然会删除已删除的代码块:您删除的代码块。你不会在master中拥有所有。 (你自己的master也可能没有弗雷德的更改,因为在上面,我们从未提及你进入你的 master和从他的master引入他的变化。)

在复杂的情况下,您必须使用自己的知识(总是超过git' s)来修复语义不正确的合并。 Git最多会注意到语法冲突,例如:"嘿,你删除了这段代码,但Fred对同一个块进行了更改,所以既然我,git,对语义一无所知,你就会有解决这个冲突"。但只有当你有幸遇到语法冲突时才会发生这种情况。如果弗雷德的改变"适合"尽管你有所改变,但由于你的改变而无所作为,git甚至不会注意到这一点。