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

pls*_*pls 1 git version-control merge git-diff

我目前在第二个分支机构上工作NC12-changePassword

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

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

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

我的理解是我的分支应该可以正常运行master并且代码应该可以正常工作。还是我想念一些东西:-\。

tor*_*rek 5

因此,主机中的所有内容都应在NC12-changePassword中

那不是“合并”的意思,因此不是什么git merge意思。

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

然后,在完成此操作之后,假设Fred进行了修改master以添加第二个代码块-也许完全在另一个文件中-仅在存在第一个代码块的情况下才有用。他承诺这样做master

后来,您获得了Fred的工作,mastergit merge用来将他的零钱变成大师。Git 不会放回您删除的代码:假设您知道自己当时在做什么。它所要做的就是发现Fred添加了一个的代码块,并将其添加到您的分支中,在该分支中什么也不做,因为它取决于您删除的块。

如果现在将分支与Fred的分支进行比较master,您仍将具有已删除的代码块:删除的代码块。你不会有一切这是在master。(您自己master也可能不会有Fred的更改,因为在上面,我们从未提及您继续进行自己的工作, master并从他那里带来了他的更改master。)

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