【问题标题】:Why did git pull change my code without throwing merge conflicts for all changes?为什么 git pull 更改了我的代码而没有为所有更改引发合并冲突?
【发布时间】:2021-03-31 04:05:21
【问题描述】:

我在本地提交了一项新功能,从远程提取并遇到了合并冲突。解决它们后,我的功能停止工作。我以为我犯了一个错误,昨天问了a question about this。因此,我对之前的提交进行了硬重置,重复了合并并解决了显示的冲突。

但是,我的功能再次停止工作。我手动查看了代码,发现我本地提交的部分代码被拉取更改了,但没有显示这部分的合并冲突。

因此,对于某些更改,会显示合并冲突,但不会显示其他更改。我通过第三次重现该情况确认了这一点。

这种行为的原因可能是什么?

【问题讨论】:

  • Git 能够在没有冲突的情况下应用更改并保证代码之后仍然可以按预期工作。举个简单的例子,假设一个提交更改了两个有缺陷的函数中的哪一个被调用,另一个修复了 使用 被调用的函数的一个错误。 Git 可以愉快地合并这些,但总体而言,错误仍然存​​在。这就是为什么测试(尤其是高级别测试——在那个例子中,功能的单元测试仍然可以通过)很重要。
  • 非常感谢@jonrsharpe 和 VonC。您的回答提高了我对 git 和软件开发的理解。 :-) 我想我现在已经找到了问题所在:当协作者合并到我的功能的较旧部分时,他们一定拒绝了我的部分更改。由于我没有在当前的本地提交中进行这些更改,因此与远程的差异没有被标记为合并冲突。我计划在未来尽快了解测试以规避这个问题。

标签: git git-merge git-pull git-merge-conflict


【解决方案1】:

这是关于并发修改:如果您的分支和您从中提取的远程文件修改了文件中的同一行,您将遇到冲突。

但是,如果其他人已将“错误”代码推送到远程,该代码在拉出时会立即应用(没有冲突,因为您没有直接修改该部分),那么您将不得不测试该拉取的结果来检测它。

【讨论】:

  • 非常感谢@VonC!在您的帮助下,我想我现在已经找到了错误。如果您有兴趣阅读它,请参阅我的顶级评论。
  • @cssdev 很好。当您进行协作分布式开发时,测试变得至关重要;)
猜你喜欢
  • 1970-01-01
  • 2015-06-14
  • 2013-10-22
  • 2022-12-18
  • 2015-11-14
  • 2016-11-02
  • 2012-01-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多