在git merge冲突中,生成的BACKUP,BASE,LOCAL和REMOTE文件是什么?

时间:2013-12-04 17:14:02

标签: git

我认为LOCAL和REMOTE文件正是他们的名字所暗示的,但BASE和BACKUP是什么?

3 个答案:

答案 0 :(得分:131)

Git执行三向合并,找到要合并的两个分支的共同祖先(也称为“合并基础”)。当您在冲突上调用git mergetool时,它将生成适合馈送到典型3向合并工具的这些文件。因此:

  • foo.LOCAL:冲突的“我们的”一面 - 即包含合并结果的分支(HEAD
  • foo.REMOTE:冲突的“他们”方面 - 你要合并的分支HEAD
  • foo.BASE:共同的祖先。对于提供三向合并工具很有用
  • foo.BACKUP:调用合并工具之前的文件内容将保留在mergetool.keepBackup = true的文件系统上。

答案 1 :(得分:2)

如果将在线存储库中的更改拉(合并),则可以将REMOTE,LOCAL和BASE理解为:

  • REMOTE =您的本地文件,包括自己的修改(“在文件系统上”)
  • LOCAL =联机存储库中的远程文件(“其他用户所做的更改”)
  • BASE =两个文件的来源(“未经任何修改”)

enter image description here

这些术语来自在线存储库观点,即“本地”。另请参阅有关three-way merge的维基百科文章。

答案 2 :(得分:1)

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

<块引用>

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

但是,rebase 命令和合并命令之间似乎存在差异。

Merge 将您的本地分支用作 LOCAL,将您要合并的分支用作 REMOTE

Rebase 将您的本地分支用作 REMOTE,并将您要重新设置的分支用作 LOCAL