在我的分支A:
我将文件从folder04/config.xml
复制到folder05/config.xml
,然后复制git add
和commit
。
在我的branchB中(B从A分支出来):
我已经有一个名为folder05/config.xml
的文件。
现在我将branchA
合并到branchB
,这似乎是一个奇怪的冲突。
Untracked files: (use "git add <file>..." to include in what will be
committed)
folder05/config.xml~HEAD
它会生成一个名为config.xml~ HEAD 的文件,这意味着什么?
我无法理解为什么,在这种情况下该怎么做?
答案 0 :(得分:7)
它生成一个名为config.xml~HEAD的文件,这意味着什么?
此文件是由git
自动生成的,因为您遇到了文件名冲突冲突 - 在两个分支中有两个无关的项目试图占用名称config.xml
。
这可能是由各种情况引起的:
最有可能,您在分支中创建了名为config.xml
的文件。在您要合并的分支中,另一个文件已重命名为到 config.xml
。由于这两个文件缺少任何共同的祖先,因此无法合并。它们都应该保存在工作目录中,但是存在冲突。因此,他们将保留,但具有唯一的名称。
正在合并的分支中的config.xml
将在磁盘上以config.xml
结帐。 您的分支中的config.xml
将作为config.xml~HEAD
在磁盘上签出。
以下是一个示例,我们在newname.txt
分支中添加名为master
的文件,并在我们合并的分支中将file.txt
重命名为newname.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.
一旦您解决了令您满意的冲突并提交了合并,您只需从工作目录中删除~HEAD
文件即可。
(最后,请记住git没有跟踪重命名发生,它使用启发式检测重命名。所以这种冲突 - 实际上 - 可能真的是冲突因为文件可能没有重命名 。)