我目前正在开发名为NC12-changePassword
的第二个分支。
对master
分支进行了更改,处理字符串的解密。我需要这些新的更改才能在我的分支上实现一个新功能,所以我合并了这些更改。
我做了一个git pull,没有冲突。当我运行git log
时,它会显示合并提交。此外,当我运行git merge master
时,它告诉我一切都是最新的。
但是我的代码无效,当我运行git diff NC12-changePassword master
时,它会列出master
中不在NC12-changePassword
内的内容。这对我来说没有意义,因为我已合并了更改,因此master中的所有内容都应该在NC12-changePassword
中。
我的理解是我的分支应该像master
一样运行,代码应该可以正常工作。或者我错过了一些东西: - \。
答案 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甚至不会注意到这一点。