在 git 合并冲突中,生成的备份、基础、本地和远程文件是什么?

我假设本地和远程文件正如它们的名字所暗示的那样,但是 BASE 和 BACKUP 是用来做什么的呢?

82480 次浏览

Git 执行三方合并,找到正在合并的两个分支的共同祖先(又名“合并基地”)。当您对冲突调用 git mergetool时,它将生成适合提供给典型的3路合并工具的这些文件。因此:

  • foo.LOCAL: 冲突的“我们”一方-即,你的分支(HEAD) ,将包含合并的结果
  • foo.REMOTE: 冲突的“他们的”一方-您合并到 HEAD的分支
  • foo.BASE: 共同的祖先。对于输入三方合并工具非常有用
  • foo.BACKUP: 调用合并工具之前文件的内容,如果 mergetool.keepBackup = true

如果 牵引(合并)从联机存储库变更为本地副本,则您可以将 REMOTE、 LOCAL 和 BASE 理解为:

  • REMOTE = 包含自己修改的本地文件(‘ as on the filessystem’)
  • LOCAL = 联机存储库中的远程文件(“由其他用户进行的更改”)
  • BASE = 两个文件的原点(“未经任何修改”)

enter image description here

这些术语来自 网上储存库观点,也就是“本地”所指的。另见维基百科关于 三人合并的文章。

根据 https://git-scm.com/docs/git-mergetool

当用这个工具调用 git mergetool 时(通过-t 或—— tool 选项或 merge.tool 配置变量) ,已配置的命令行将被调用,$BASE 设置为包含合并通用基的临时文件的名称(如果可用的话) ; $LOCAL 设置为包含当前分支上文件内容的临时文件的名称; $REMOTE 设置为包含要合并的文件内容的临时文件的名称; $MERGED 设置为合并工具应该写入合并解析结果的文件的名称。

但是,rebase 命令和 merge 命令之间似乎有区别。

Merge 使用本地分支作为 LOCAL,使用要合并的分支作为 REMOTE

Rebase 将本地分支用作 REMOTE,将要重新基于的分支用作 LOCAL