我最近购买了 Beyond Compare Pro 来合并与
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
所有其他文件都会给出失败的合并错误,甚至没有打开 BeyondCompare 合并工具来进行合并。
(m)odified or (d)eleted
,这是否意味着合并后我必须在本地和远程之间选择哪个文件?编辑
我的 .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
第一个提示显示 (m)odified 或 (d)eleted,这是否意味着合并后我必须在本地和远程之间选择哪个文件?
是的。也许您想选择 (d) 删除状态,假设您希望这些文件在您的
feature
分支中保持删除状态,并且不关心自您最初删除它们以来它们如何被更改。
通常您的
master
旨在始终与遥控器同步。本地更改(例如删除文件)可以像您一样在 feature
分支中正确完成,所以这很好。如果您的更改纯粹是本地的,从未打算成为主项目的永久部分,那么它们将永远保留在 feature
分支中,并且每当您从远程提取新更新时,您偶尔会从 master
合并到 feature
,正如你正在做的那样。您唯一想要从 feature
合并回 master
然后 push
的唯一时间就是为使用该项目的每个人更改一些内容。
第二个提示告诉我合并失败,为什么会出现这种情况?
如果其中任何一个的答案是“否”,那么您将返回 git,合并标记仍在文件中,这意味着“我没有完成”。换句话说,合并“失败”,意味着它没有完全成功完成。
我不会担心文件地址看起来错误。当 git 尝试解决合并时,它将三个不同的版本(远程、本地、合并)复制到三个临时文件中。当您完成编辑和合并后,它会将“合并”的文件复制回您的本地文件中。
所有其他文件都会给出失败的合并错误,甚至没有打开 BeyondCompare 合并工具来进行合并。
这看起来很奇怪。通常git会一一继续。抱歉,我无法在这里提供更多帮助。
如果您想查看 Beyond Compare 中未解决的冲突,您可以运行
git mergetool
,这将打开与默认合并工具的冲突。如果您还没有安装 git,则必须先设置 git 才能使用 Beyond Compare。
配置说明可在此处找到。
很抱歉几年前我没有看到这个。 我现在已经成功使用 Beyond Compare 4 Pro 进行
git difftool
和git mergetool
多年了。 以下是如何在 .gitconfig 中进行设置。 如果您仍在使用 BC3,请将“bc3”替换为“bc4”,这样就可以正常工作了。 BC3 和现在的 BC4 都进行非常直观的三向合并,并且可以与 git for Windows 完美配合。
您可以使用以下命令进行设置。
$ git config --global diff.tool bc4
$ git config --global diff.guitool bc4
$ git config --global merge.tool bc4
$ git config --global merge.guitool bc4
$ git config --global difftool.prompt true
$ git config --global mergetool.prompt true
$ git config --global mergetool.keepBackup true
etc.
但我更喜欢只编辑 .gitconfig 文件。 如果这样做,请确保“子”项目(位于部分标记下方)恰好有 1 个前导制表符,并且部分标记从第 1 列开始。
-----我在 BC4 上的 .gitconfig 部分----------
[diff]
tool = bc4
guitool = bc4
[merge]
tool = bc4
guitool = bc4
[difftool]
prompt = true
[difftool "bc4"]
trustExitCode = true
path = C:/Program Files/Beyond Compare 4/BComp.exe
cmd = "C:/Program Files/Beyond Compare 4/BComp.exe" "$LOCAL" "$REMOTE"
[mergetool]
prompt = true
keepBackup = true
[mergetool "bc4"]
trustExitCode = true
path = C:/Program Files/Beyond Compare 4/BComp.exe
cmd = "C:/Program Files/Beyond Compare 4/BComp.exe" "$LOCAL" "$REMOTE" "$BASE" "$MERGED"
------结束.gitconfig----------------------
trustExitCode
项告诉 Git 在合并时注意 bc4 退出代码。 如果在合并步骤期间在 GUI 中退出 bc4 而不保存合并的代码,那么它将以非零退出代码退出,并且 Git 将不会使用生成的合并代码。 另一方面,如果您保存了合并代码并解决了所有合并,则 bc4 将以零退出代码退出,指示 Git 接受生成的合并代码,并将其合并到即将进行的合并提交中。
我使用的是Windows系统。 如果您使用的是 Linux 系统,您可能需要进行路径调整。
这个网页帮助我发现了所有这些并进行了设置: