使用Beyond Compare进行Git合并

4
我最近购买了Beyond Compare Pro以合并使用git共享的代码(我对git的理解非常有限)。现在我有两个分支,一个是master,另一个是feature。我最近从远程拉取了master,所以现在master比master和feature之间的共同祖先超前几个提交。
由于我的feature分支大多是删除操作,我希望将master合并到feature而不是相反(这有意义吗?)。所以基本上我做了以下操作:
git checkout master
git pull origin master
git push origin master

此时我的feature分支比master分支晚几次提交,也领先于它几个提交。为将master分支的提交合并到feature分支,我执行了以下操作:

git checkout feature
git merge master
git mergetool

现在我遇到了一系列类似以下信息的提示:
Deleted merge conflict for 'ED/build/make/rules.mk':
  {local}: deleted
  {remote}: modified file
Use (m)odified or (d)eleted file, or (a)bort? m

Normal merge conflict for 'ED/src/driver/ed_model.F90':
  {local}: modified file
  {remote}: modified file
merge of ED/src/driver/ed_model.F90 failed
Continue merging other unresolved paths [y/n]? y

所有其他文件都会在打开Beyond Compare合并工具之前给出无法合并的错误提示。

  • 第一个提示会问:“更改(m)或删除(d)”,这是否意味着我必须选择本地和远程文件中哪一个作为合并的结果?
  • 第二个提示告诉我合并失败了,为什么会这样?

编辑

我的.gitconfig中相关的部分是:

[diff]
    tool = bc3
[difftool]
        prompt = false
[difftool "bc3"]
    trustExitCode = true
[core]
    fileMode = false
    symlink = false
    ignorecase = true
[merge]
    tool = bc3
[mergetool "bc3"]
    trustExitCode = true
[alias]
    difftool = difftool --dir-dif --no-symlinks

1
请展示你的合并工具配置。 - Lasse V. Karlsen
我猜测错误部分与BC(由git提供)对于3个文件比较具有错误路径有关,因为地址都相同,附加了LOCAL/REMOTE/BASE关键字。 - Manfredo
尝试指定到Beyond Compare 3的路径。 - Lasse V. Karlsen
那会改变什么,因为BC已经正确打开了呢?而且这通常是这样设置的。 - Manfredo
那么你的意思是Beyond Compare确实打开了?对不起,我没听清楚。 - Lasse V. Karlsen
是的,抱歉我表达不够清楚。所以它为第一个文件(.gitignore)打开了正确的比较窗格;然后对于其余的文件,它打开了但是带有空白窗格,显示未找到任何文件。但是,如果我执行git status,我会看到所有已更改并需要合并的文件,就像.gitignore一样。 - Manfredo
2个回答

4
第一个提示框说明(修改)或(删除),这是否意味着我必须选择本地和远程之间要选择哪个文件作为合并的结果?
是的。假设您希望这些文件在您的特性分支中保持删除状态,并且不关心它们自原始删除以来如何更改,那么可能您要选择(删除)状态。
通常,您的主分支应始终与远程同步。像删除文件这样的本地更改应该在特性分支上正确执行,所以您正在做的很好。如果您的更改纯粹是本地的,永远不打算成为主项目的永久部分,则它们将永远留在特性分支中,并且每当您从远程拉取新的更新时,您会偶尔从主分支合并到特性分支,就像您正在做的那样。您想要从特性分支合并回主分支,然后推送的唯一时间是为了更改所有使用该项目的人的内容。
第二个提示告诉我合并失败了,为什么会发生这种情况?
  • 你是否解决了Beyond Compare中标记为“!”的每个冲突?
  • 对于每个差异,您的中间列是否看起来符合您的要求?
  • 您是否保存了已合并的文件?
如果任何一个问题的答案是“否”,那么您将带有合并标记的文件回到git中,这意味着“我没有完成”。换句话说,该合并“失败”了,这意味着它未能成功完全完成。
我不会担心文件地址看起来错误。当git尝试解决合并时,它将三个不同版本(远程,本地,已合并)复制到三个临时文件中。当您完成编辑和合并时,它将“已合并”的文件复制回您的本地文件。
其他所有文件都在未打开Beyond Compare mergetool进行合并的情况下给出了合并失败错误。
这似乎很奇怪。通常,git会逐一继续。很抱歉我无法提供更多帮助。

1
如果您想在Beyond Compare中查看未解决的冲突,可以运行git mergetool,这将使用默认的合并工具打开冲突。如果您还没有设置git使用Beyond Compare,则必须先进行设置。
配置说明可以在此处找到。

错误是在运行合并工具后显示的。而且我按照说明进行了设置。这不是设置的问题,因为我已经在另一个场合运行过合并工具了。 - Manfredo
你以前用Beyond Compare解决过合并冲突吗?还是这是第一次它没有自动解决? - Confuzing
所以这是情况:最初我尝试将功能分支合并到主分支。从本质上讲,我认为这更有意义。然而后来我注意到,因为主分支中存在这些文件,所以在合并的文件中包含了我在功能分支中删除的所有内容。于是我决定将主分支合并到功能分支。在第一次合并功能分支到主分支时,BC mergetool会弹出所有3个窗口并进行合并。现在它只为.gitignore文件执行此操作,并跳过其他所有文件,并显示我报告的错误信息... - Manfredo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接