我正在开发一个协作项目,当我希望它们引发冲突并且我可以手动合并它们时,文件通常会被无冲突地合并。特别是当人们恢复变化时。
WITH product AS (
select 1 as productId, 'A' as type
union all select 2, 'A'
union all select 3, 'A'
union all select 4, 'B'
union all select 5, 'B'
union all select 6, 'C'
)
SELECT distinct /* distinct because analytic functions don't reduce row count like aggregate functions */
type, count(*) over (partition by type) / count(*) over ()
FROM product;
type | perc
------+----------------------
A | 0.500000000000000000
B | 0.333333333333333333
C | 0.166666666666666667
所以D中的变化会被B中的旧东西覆盖。
有没有办法强制git合并一个特定的文件,指明它有冲突?
答案 0 :(得分:2)
是
echo path.pattern -merge >>.gitattributes
其中path.pattern与gitignore之类似。
这将避免任何解决潜在冲突的尝试,但正如David Deutsch在评论中指出的那样,如果file.txt
中B..C1
发生了更改B..C
并且C1
中没有更改,则git将始终采用--no-commit
版本 - git并不认为一个提示中没有任何更改,因为某些内容可能与另一个提示中存在的任何更改存在冲突。
对于那些真正存在的情况,其中重要的部分是文件没有更改,您必须使用text-indent
并手动修复索引。< / p>
答案 1 :(得分:2)
在这种情况下,您可以做的一件事是将--no-commit
传递给git merge
,然后在提交合并之前浏览要更改的文件。但是,我建议正常合并,然后执行另一个显式提交,以恢复所需的文件。在合并过程中对文件进行不必要的更改很少是一个好主意,因为它可能会导致混乱的历史记录。例如,如果您在合并过程中“修复”了问题,那么稍后会对相关文件进行日志记录,您将看不到修复,因为记录文件历史记录通常会跳过合并。请注意,无论使用哪种方法,如果您的分支被合并回另一个分支,那么其他分支也将具有“修复”。
话虽如此,似乎这里存在更深层次的问题。如果某人还原B
,我认为他们出于某种原因这样做,并且C1
中的更改取决于此。所以你真的想在C1
合并而不合并他们的回复吗?或者是恢复错误,在这种情况下你需要教育那些做这件事的开发人员停止做这些事情?
答案 2 :(得分:1)
有没有办法强制git合并一个特定的文件,指明它有冲突?
<强>都能跟得上即可。
Git跟踪更改,一旦git没有&#34;识别&#34;改变你不会发生冲突。
Git使用启发式https://www.kernel.org/pub/software/scm/git/docs/technical/pack-heuristics.txt 跟踪变化。因此,除非存在真正的冲突(例如:相同的行更改),否则不存在冲突。
如果你想知道git如何计算diff读取这个:
What is the diff version git use? diff2 or diff3?