繁体   English   中英

git:当git没有注意到冲突时如何手动合并文件

[英]git: how to merge a file manually when git does not notice conflicts

我正在开发一个协作项目,当我希望它们引发冲突并且我可以手动合并它们时,文件通常会被无冲突地合并。 特别是当人们恢复变化时。

       B1 ------C1
      /            \
A --- B  --- C ---- D -- 

所以D中的变化会被来自B的旧东西所覆盖。

有没有办法强制git合并一个特定的文件,指明它有冲突?

是。

echo path.pattern -merge >>.gitattributes

git属性docs

其中path.pattern与gitignore等相同。

这将避免在解决潜在冲突的任何企图,但大卫德语在评论中指出,如果file.txt在改变B..C1并没有改变B..C ,git会始终以C1版-蹦没有按不要认为一个小费中没有任何变化,因为某些东西被认为可能与另一个小小的变化存在冲突。

对于那些真正存在的情况,其中重要的部分是文件没有改变,你必须使用--no-commit并手动修复你的索引。

在这种情况下你可以做的一件事是将--no-commit传递给git merge ,然后在提交合并之前浏览你想要更改的文件。 但是,我建议正常合并,然后执行另一个显式提交,以恢复所需的文件。 在合并过程中对文件进行不必要的更改很少是一个好主意,因为它可能会导致混乱的历史记录。 例如,如果您在合并过程中“修复”了问题,那么稍后会对相关文件进行日志记录,您将看不到修复,因为记录文件历史记录通常会跳过合并。 请注意,无论使用哪种方法,如果您的分支被合并回另一个分支,那么其他分支也将具有“修复”。

话虽如此,似乎这里存在更深层次的问题。 如果有人还原了B ,我认为他们这样做是有原因的,他们对C1的改变取决于那个。 所以你真的想在C1合并而不是合并它们的还原吗? 或者是还原错误,在这种情况下你需要教育那些做这件事的开发人员停止做这些事情?

有没有办法强制git合并一个特定的文件,指明它有冲突?

Git跟踪更改,一旦git没有“识别”更改,您就不会发生冲突。

Git使用启发式https://www.kernel.org/pub/software/scm/git/docs/technical/pack-heuristics.txt来跟踪更改。 因此,除非存在真正的冲突(例如:相同的行更改),否则不会发生冲突。

如果你想知道git如何计算diff读取:
什么是diff版本git使用? diff2还是diff3?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM