禁用Git重命名检测

时间:2011-05-16 04:47:18

标签: git merge rename

  1. 我有一个文件foo.txt
  2. 创建并结帐分支'branch_A'
  3. git mv foo.txt bar.txt后跟git add -A,然后是git commit -m "renamed foo.txt"
  4. 结帐大师,git checkout master
  5. 删除foo.txt并提交。
  6. 现在合并branch_A,git merge branch_A
  7. 有了这个,我得到一个合并冲突(重命名/删除)。

    CONFLICT (rename/delete): Rename foo.txt->bar.txt in branch_A and deleted in HEAD
    

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

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

    谢谢!

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

2 个答案:

答案 0 :(得分:8)

你可以尝试:

git merge -s resolve branch_A

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

git rename/delete confusion

git divergent renaming

答案 1 :(得分:6)

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

git merge -Srecursive -Xno-renames

请参阅commit 44c74eccommit 2307211commit 63651e1(2016年2月24日),commit 2307211commit 63651e1(2016年2月24日),commit 87892f6commit 83837ec(2016年2月21日)和commit 1b47ad1commit d2b11ec(2016年2月17日)Felipe Gonçalves Assis (asiz)(由Junio C Hamano -- gitster --合并于commit 4ce064d,2016年2月26日)

  

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

     

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

man git-merge将包括:

no-renames
     

关闭重命名检测   请参阅git diff --no-rename

(注意,如commit 1b47ad1所示,在find-renames接口之后的git diff合并策略使得选项rename-threshold从git 2.8开始是多余的。

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

commit 6f10a09commit 85b4603commit a7152e9Ben Peart (benpeart)(2018年5月2日)。 (由Junio C Hamano -- gitster --合并于commit 6e2ba77,2018年5月30日)

  

merge:添加merge.renames配置设置

     

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