禁用Git重命名检测 我有一个文件,foo.txt 创建并签出分支机构“分支机构A” git mv foo.txt bar.txt后跟git add-A然后git commit-m“重命名的foo.txt” 签出主机,git签出主机 删除foo.txt并提交 现在合并分支A,git合并分支A

禁用Git重命名检测 我有一个文件,foo.txt 创建并签出分支机构“分支机构A” git mv foo.txt bar.txt后跟git add-A然后git commit-m“重命名的foo.txt” 签出主机,git签出主机 删除foo.txt并提交 现在合并分支A,git合并分支A,git,merge,rename,Git,Merge,Rename,这样,我得到了一个合并冲突(重命名/删除) 这是有道理的,也是我所期望的。但是,我想知道是否有一种方法可以让git merge不检测重命名,而是将它们视为已添加/已删除。在本例中,我希望git检测到foo.txt被删除,只需添加bar.txt即可。没有冲突 我尝试过使用-X重命名阈值,但它对我不起作用。我尝试了阈值0和120(100以上的数字)。我错过了什么 谢谢 另外,我还收到了错误:拒绝在…丢失未跟踪的文件。错误。这是什么意思?您可以尝试一下: git merge -s resolve br

这样,我得到了一个合并冲突(重命名/删除)

这是有道理的,也是我所期望的。但是,我想知道是否有一种方法可以让git merge不检测重命名,而是将它们视为已添加/已删除。在本例中,我希望git检测到foo.txt被删除,只需添加bar.txt即可。没有冲突

我尝试过使用-X重命名阈值,但它对我不起作用。我尝试了阈值0和120(100以上的数字)。我错过了什么

谢谢


另外,我还收到了
错误:拒绝在…丢失未跟踪的文件。
错误。这是什么意思?

您可以尝试一下:

git merge -s resolve branch_A
此外,您是否尝试过在此处查看类似问题:

使用git 2.8(2016年3月),您将有另一个选项(作为递归合并策略的选项)

参见(2016年2月24日),(2016年2月24日),(2016年2月21日)和(2016年2月17日).
(于2016年2月26日合并)

merge recursive
:禁用重命名的选项 递归策略默认情况下启用重命名检测。
添加一个策略选项以禁用重命名检测,即使是精确的重命名

这将包括:

关闭重命名检测。

(注意,如中所示,
find renames
合并策略遵循
git diff
接口,使得选项
rename threshold
从git 2.8开始变得多余)


Git 2.18(2018年第2季度)还有一个额外的设置:当
merge.renames
配置设置为false时,可以告诉递归合并策略不要花费周期试图找到重命名的路径并相应地合并它们

参见(2018年5月2日)作者。
(于2018年5月30日被合并)

合并
:添加
合并。重命名
配置设置

添加通过配置设置控制合并重命名检测的功能。
此设置的行为与相同,默认值为
diff.renames
,但仅适用于merge


错误:拒绝在…
丢失未跟踪的文件可能是合并
bar.txt
的结果,该文件在
分支A
中跟踪,但在
master
中未跟踪,假设它存在于使用git 2.8(2016年3月)的工作目录中,您可以选择执行
git合并--不重命名。参见Git 2.18(2018年第2季度),您可以选择
Git config merge.renames false
。看,这是在2.9中删除的吗?稳定版本的git维护者ppa没有AFAICT标志。@ThorCaller我同意。它实际上是合并策略的一个选项。我已经编辑了答案。@VonC:我可以提供两个小编辑吗:在git merge中添加连字符;在不重命名之前删除双连字符。应该说:“man-git合并将包括:不重命名”@chrisinmtown谢谢。我已经相应地编辑了答案。这确实需要更多的解释。基本上,我已经修改了
file.txt
,并移动到
foo
子目录,然后在历史中回溯,并使用相同的
file.txt
作为起点来修改它并将其移动到
bar
目录。然后,我尝试合并这两个分支,希望最终得到文件的独立版本
foo
bar
,其历史可以追溯到同一个源。如@manojlds所示,使用
-s resolve
效果很好,但正如利亚姆所提到的,它确实需要更多的解释。但是非常感谢马诺兹的回答。
git merge -s resolve branch_A
git merge -Srecursive -Xno-renames
no-renames