[英]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
其中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.