git - git merge后如何处理xxx~HEAD?

标签 git git-merge git-merge-conflict

在我的分支A:

我从 folder04/config.xml 复制一个文件到 folder05/config.xml,然后 git addcommit.

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

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

现在我将 branchA merge 到 branchB 中,出现了这样一个奇怪的冲突。

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

    folder05/config.xml~HEAD

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

我不明白为什么,在这种情况下我该怎么办?

最佳答案

It generates a file named config.xml~HEAD, what does it means?

这个文件是由 git 自动生成的,因为你有一个文件名冲突冲突 - 你有两个在两个分支中不相关的项目试图占用名称 config.xml.

这可能是由多种情况引起的:

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

正在 merge 的分支中的config.xml 将作为config.xml 在磁盘上 checkout 。 您的分支 中的 config.xml 将作为 config.xml~HEAD 在磁盘上 checkout 。

这是一个例子,我们在 master 分支中添加一个名为 newname.txt 的文件,并将 file.txt 重命名为 newname.txt 在我们要 merge 的分支中。在这种情况下,将引发冲突,我们分支的内容将在工作中写入 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.

一旦您满意地解决了冲突并提交了 merge ,您可以简单地从工作目录中删除 ~HEAD 文件。

(最后,请记住 git 不会跟踪重命名的发生,它使用试探法来检测重命名。所以这种冲突 - 在实践中 - 可能不是真的冲突因为这些文件可能真的没有被重命名。)

关于git - git merge后如何处理xxx~HEAD?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48204077/

相关文章:

django - Git - 如何将本地存储库提交到另一个本地存储库的子文件夹?

merge-conflict-resolution - 如何让 KDiff3 在没有 UI 的情况下自动合并?

git - 如何让我的分支显示 "Your branch is up to date with ' origin/master'

git - 如何对谷歌云 git repo 进行代码审查

git - 如何 merge 一个只导致一次提交的 git 分支(比如使用 --squash),但允许 future 的 merge 而不会发生冲突?

git - 将源站的 git 仓库 merge 到上游仓库

Git双向 merge

Git 冲突——显示误报

git - 如何解决 git stash 冲突?

windows - Windows 版 Git 停止工作