Git 与无与伦比合并

Git merge with beyond compare

我最近购买了 beyond compare pro 来合并与 git 共享的代码(对此我的了解非常有限)。 我现在有两个分支,一个 master 和一个 feature。我最近从远程拉取了 master,所以现在 mastermasterfeature.

之间的共同祖先提前了一些提交

因为我的分支 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 mergetool 进行合并就给出了合并失败的错误。

编辑

我的 .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

如果您想在 Beyond Compare 中查看未解决的冲突,您可以 运行 git mergetool 这将使用您的默认合并工具打开冲突。如果您还没有设置,您必须先设置 git 才能使用 Beyond Compare。

已找到配置说明 here

The first prompt says (m)odified or (d)eleted, does this mean that I have to choose which file to select between local and remote as a result of the merge?

是的。可能您想选择 (d)eleted 状态,假设您希望这些文件在 feature 分支中保持删除状态并且不关心它们在您最初删除后可能发生了怎样的变化。

通常,您的 master 旨在始终与遥控器保持同步。删除文件等本地更改在 feature 分支中正确完成,这很好。如果您的更改纯粹是本地的,从未打算成为主项目的永久部分,那么它们将永远留在 feature 分支中,并且您偶尔会从 master 合并到 feature完全按照您的操作从远程获取最新更新。唯一一次你想从 feature 合并回 master 然后 push 是为每个使用该项目的人改变一些东西。

The second prompt tells me that the merge failed, why is this happening?

  • 您是否解决了 Beyond Compare 中提到的所有冲突(在空白处标有“!”)?
  • 你的中间栏是否看起来像你想要的每一个不同?
  • 你保存合并后的文件了吗?

如果其中任何一个的答案是 "no",那么您 return 到 git 合并标记仍在文件中,这意味着 "I didn't finish"。换句话说,那个合并 "failed",意味着它没有完全成功地完成。

我不担心文件地址看起来不对。当 git 尝试解决合并时,它将三个不同的版本(远程、本地、合并)复制到三个临时文件中。完成编辑和合并后,它会将 'merged' 复制回本地文件。

All other files give a failed merge error without even opening the beyondcompare mergetool to do the merge.

这似乎很奇怪。通常 git 会一一继续。抱歉,我无法提供更多帮助。