git merge后如何处理xxx~HEAD?

Cor*_*rey 3 git git-merge git-merge-conflict

在我的分支A:

我将文件复制folder04/config.xmlfolder05/config.xml,然后git addcommit.

在我的branchB中(B从A分支出来):

我已经有一个名为的文件folder05/config.xml.

现在我融入branchAbranchB,这似乎是一个奇怪的冲突.

Untracked files:   (use "git add <file>..." to include in what will be
committed)

    folder05/config.xml~HEAD
Run Code Online (Sandbox Code Playgroud)

它生成一个名为config.xml~ HEAD的文件,这意味着什么?

我无法理解为什么,在这种情况下我该怎么办?

Edw*_*son 7

它生成一个名为config.xml~HEAD的文件,这意味着什么?

此文件是git由于您发生文件名冲突冲突而自动生成的- 您在两个试图占用名称的分支中有两个不相关的项目config.xml.

这可能是由各种情况造成的:

最有可能的是,您创建了config.xml在分支中命名的文件.在您要合并的分支中,将一个不同的文件重命名 config.xml.由于这两个文件缺少任何共同的祖先,因此无法合并.它们都应该保存在工作目录中,但是存在冲突.因此,他们将被保留,但唯一的名称.

config.xml被合并的分支将在磁盘上签出config.xml.将config.xml您的分支将在磁盘上签出config.xml~HEAD.

下面是一个例子,在这里我们添加一个名为文件newname.txt在我们的master分公司,并重新命名file.txtnewname.txt在我们正在合并分支在这种情况下,冲突将提高我们的分支的内容将被写成.newname.txt~HEAD在工作文件夹:

% git checkout -bbranch
Switched to a new branch 'branch'

% git mv file.txt newname.txt

% git commit -m"rename file -> newname"
[branch d37e379] rename file -> newname
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename file.txt => newname.txt (100%)

% git checkout master
Switched to branch 'master'

% echo "new file" > newname.txt

% git add newname.txt

% git commit -m"added newname in master"
[master f7bd593] added newname in master
 1 file changed, 1 insertion(+)
 create mode 100644 newname.txt

% git merge branch
CONFLICT (rename/add): Rename file.txt->newname.txt in branch. newname.txt added in HEAD
Adding as newname.txt~HEAD instead
Automatic merge failed; fix conflicts and then commit the result.
Run Code Online (Sandbox Code Playgroud)

一旦您解决了令您满意的冲突并提交了合并,您只需~HEAD从工作目录中删除该文件即可.

(最后,请记住,git不跟踪发生的重命名,它使用启发式检测重命名.所以这种冲突 - 实际上 - 可能不是真正的冲突,因为文件可能没有真正重命名.)

  • 参考:[developercommunity.visualstudio.com:〜rebase后的HEAD文件](https://developercommunity.visualstudio.com/content/problem/308658/head-files-after-rebase.html) (2认同)