Cor*_*rey 3 git git-merge git-merge-conflict
在我的分支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
Run Code Online (Sandbox Code Playgroud)
它生成一个名为config.xml~ HEAD的文件,这意味着什么?
我无法理解为什么,在这种情况下我该怎么办?
它生成一个名为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.
Run Code Online (Sandbox Code Playgroud)
一旦您解决了令您满意的冲突并提交了合并,您只需~HEAD从工作目录中删除该文件即可.
(最后,请记住,git不跟踪发生的重命名,它使用启发式检测重命名.所以这种冲突 - 实际上 - 可能不是真正的冲突,因为文件可能没有真正重命名.)