禁用Git重命名检测

Ken*_*awa 9 git merge rename

  1. 我有一个文件, foo.txt
  2. 创建并签出分支'branch_A'
  3. git mv foo.txt bar.txt其次git add -Agit commit -m "renamed foo.txt"
  4. 结账大师, git checkout master
  5. 删除foo.txt并提交.
  6. 现在合并branch_A, git merge branch_A

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

CONFLICT (rename/delete): Rename foo.txt->bar.txt in branch_A and deleted in HEAD
Run Code Online (Sandbox Code Playgroud)

这是有道理的,也是我所期待的.但是,我想知道git merge是否有办法检测重命名,而是将它们视为添加/删除.在这种情况下,我希望git能够检测到foo.txt已被删除,只需添加bar.txt即可.没有冲突.

我尝试过使用-X rename-threshold,但它对我没用.我已经尝试过阈值0和120(高于100的数字).我错过了什么?

谢谢!

PS我也遇到了error: refusing to lose untracked file at...错误.这是什么意思?

man*_*lds 8

你可以尝试:

git merge -s resolve branch_A
Run Code Online (Sandbox Code Playgroud)

此外,您是否尝试过在此处查看类似问题:

git重命名/删除混淆

git发散重命名

  • 这真的需要更多解释 (2认同)

Von*_*onC 6

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

git merge -Srecursive -Xno-renames
Run Code Online (Sandbox Code Playgroud)

提交44c74ec,提交2307211,提交63651e1(2016年2月24日),提交2307211,提交63651e1(2016年2月24日),提交87892f6,提交83837ec(2016年2月21日),以及提交1b47ad1,提交d2b11ec(2016年2月17日)由菲利普GonçalvesAssis(asiz).
(由Junio C gitsterHamano合并- -提交4ce064d,2016年2月26日)

merge-recursive:禁用重命名的选项

递归策略默认启用重命名检测.
添加策略选项以禁用重命名检测,即使是精确重命名也是如此.

男子git-merge将包括:

no-renames
Run Code Online (Sandbox Code Playgroud)

关闭重命名检测.
git diff --no-rename.

(注意,如提交1b47ad1中所示,find-renames合并策略,在git diff接口之后,使选项rename-threshold从git 2.8开始冗余)


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

请参阅Ben Peart()提交6f10a09,提交85b4603,提交a7152e9(2018年5月2日).(由Junio C Hamano合并- -提交6e2ba77,2018年5月30日)benpeart
gitster

merge:添加merge.renames配置设置

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