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

3

我目前正在处理一个名为NC12-changePassword的第二分支。

master分支已经作出了有关解密字符串的更改。 我需要这些新更改才能在我的分支上实现一个新功能,因此我合并了这些更改。

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

然而,我的代码无法正常工作,当我运行git diff NC12-changePassword master时,列出了master中存在但不在NC12-changePassword中的内容。 这对我来说毫无意义,因为我合并了这些更改,因此NC12-changePassword中应该包含所有master的内容。

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

1个回答

11
因此,主分支中的所有内容都应该在NC12-changePassword中,这并不是“合并”所意味的,也不是git merge所做的事情。
举个简单的例子来说明。假设你从主分支创建了一个分支,并且在该分支中删除了一段代码并提交了结果,然后,Fred修改了主分支以添加第二个代码块 - 也许在完全不同的文件中 - 只有在第一个代码块存在时才执行某些操作。他将其提交到主分支。之后,你获取了Fred在主分支上的工作并使用git merge将his-changes-to-master合并到你的分支中。Git不会将你删除的代码放回去:它认为你当时知道你在做什么。它只会发现Fred添加了一个新的代码块,并将该代码块添加到你的分支中,在那里它无法正常工作,因为它依赖于你删除的代码块。如果现在将你的分支与Fred的主分支进行比较,你仍然会有一个删除的代码块:你删除的代码块。你不会拥有那个主分支中的全部内容。(由于以上未提及你如何进入你自己的主分支并从他的主分支引入更改,所以你自己的主分支可能也没有Fred的更改。)

在复杂情况下,你必须使用自己的知识(这总是超过Git的)来修复语义不正确的合并。 Git最多只能注意到语法冲突,例如:“嘿,你删除了这个代码块,但弗雷德对同一块进行了更改,所以由于我,Git,对语义一无所知,你将不得不解决此冲突。” 但仅当你足够幸运地遇到语法冲突时才会发生。如果弗雷德的更改“适应”了你的更改,但由于你的更改而没有做任何事情,Git甚至都不会注意到。


感谢您的解释。非常有帮助。 - pls

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接