git 合并似乎成功,但 HEAD 和 origin 标签留在文件中

git merge appears successful but HEAD and origin tags are left in the file

我已使用以下选项配置我的 git 实例以使用 winmerge 作为比较工具:

git config --global merge.tool winmerge
git config --replace --global mergetool.winmerge.cmd "\"C:\Program Files (x86)\WinMerge\WinMergeU.exe\" -e -u -dl \"Base\" -dr \"Mine\" \"$LOCAL\" \"$REMOTE\""
git config --global mergetool.prompt false

当我 运行 "git mergetool" 处理有冲突的文件时,我看到 winmerge window 有冲突的文件,我可以使用 winmerge 来按照正常合并解决冲突。

当我保存文件并且 git 提示我回答合并是否成功时,我回答 "y",我想我已经完成了。

然而,当我查看新合并的文件时,我看到 <<<<<<< HEAD 和 >>>>>>> origin/master 标记(这些不在 winmerge window 当我保存最终的合并文件时)。我还在文件夹中看到 LOCAL.bak 和 REMOTE.bak 版本的文件。

我之前从未在合并文件中留下过 HEAD 和 origin 标记,也没有在合并后留下 LOCAL.bak 和 REMOTE.bak 文件。就好像它们是在我回答 "y" 成功合并问题后添加的,因为它们没有显示在 winmerge window 中。我是否缺少某种配置选项?我似乎无法找出为什么它正在做它正在做的事情。

您错误地设置了 git mergetool。将 winmerge 用作 difftool 和 mergetool 的工作配置(发布于 https://gist.github.com/shawndumas/6158524)是:

[mergetool]
    prompt = false
    keepBackup = false
    keepTemporaries = false

[merge]
    tool = winmerge

[mergetool "winmerge"]
    name = WinMerge
    trustExitCode = true
    cmd = "/c/Program\ Files\ \(x86\)/WinMerge/WinMergeU.exe" -u -e -dl \"Local\" -dr \"Remote\" $LOCAL $REMOTE $MERGED

[diff]
    tool = winmerge

[difftool "winmerge"]
    name = WinMerge
    trustExitCode = true
    cmd = "/c/Program\ Files\ \(x86\)/WinMerge/WinMergeU.exe" -u -e $LOCAL $REMOTE

.bak 文件是在保存修改后的文件时由 WinMerge 创建的。如果您查看 WinMerge 选项,您会发现默认情况下将这些备份文件(如果您愿意,可以是 'pre change safety copies')存储在与原始文件相同的文件夹中。您可以选择将它们存储在不同的文件夹中。