gpt4 book ai didi

Git重命名检测空文件

转载 作者:太空狗 更新时间:2023-10-29 13:25:38 25 4
gpt4 key购买 nike

我最近遇到了一个问题,一个空文件在两个分支中被重命名不同,但 merge 后没有引发冲突。

重新创建的步骤如下。

  1. 创建一个空文件。

    git init
    touch empty
    git add empty
    git commit -m "add empty file"
  2. 在分支中重命名。

    git checkout -b branch
    git mv empty empty-in-branch
    git commit -m "empty -> empty-in-branch"
  3. 在母版中以不同的方式重命名。

    git checkout master
    git mv empty empty-in-master
    git commit -m "empty -> empty-in-master"
  4. 将分支 merge 到 master。

    git merge --no-commit branch

这给出了消息 Automatic merge wonder well;在按要求提交之前停止

git status 仅显示新文件 empty-in-branch。但是没有删除 empty-in-master,所以如果我们在这个阶段提交,我们将获得两个文件。

我希望这会被标记为需要手动解决的 merge 冲突(即决定保留哪个空文件)。如果原始文件非空,就会发生这种情况。

是否有影响重命名检测的空文件有什么特别之处?是否有任何参数我可以添加到 git merge 中以使其检测冲突(例如调整 merge 策略)?

最佳答案

自本次提交起,空文件不再被考虑用于递归 merge 的重命名:https://github.com/git/git/commit/4f7cb99ada26be5d86402a6e060f3ee16a672f16

旧版本的 Git 仍将其报告为冲突。

$ git --version
git version 1.7.9.5
# ... follow OP instructions to reproduce
$ git merge --no-commit branch
CONFLICT (rename/rename): Rename "empty"->"empty-in-master" in branch "HEAD" rename "empty"->"empty-in-branch" in "branch"
Automatic merge failed; fix conflicts and then commit the result.
$ git status
# On branch master
# Unmerged paths:
# (use "git add/rm <file>..." as appropriate to mark resolution)
#
# both deleted: empty
# added by them: empty-in-branch
# added by us: empty-in-master
#
no changes added to commit (use "git add" and/or "git commit -a")

Git 不会隐式跟踪重命名,因此在没有重命名检测的情况下,Git 只会看到两个提交都删除了文件empty,并且每个提交都添加了一个新文件。

p>

有一个选项可以改变 git-diff 的这种行为 ( https://github.com/git/git/commit/90d43b07687fdc51d1f2fc14948df538dc45584b ),但目前它没有在 git merge 的选项中公开。

其他 merge 策略似乎也没有提供所需的行为。

关于Git重命名检测空文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23726196/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com