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

fil*_*003 104 git

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

Edw*_*son 148

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

  • foo.LOCAL:冲突的"我们的"一面 - 即你的分支(HEAD)将包含合并的结果
  • foo.REMOTE:冲突的"他们"方面 - 你要融入的分支 HEAD
  • foo.BASE:共同的祖先.用于输入三向合并工具
  • foo.BACKUP:调用合并工具之前的文件内容,如果是,将保存在文件系统上mergetool.keepBackup = true.

  • 他们是......你在做rebase吗?因为在 rebase 中两边是相反的。 (11认同)
  • 没有."LOCAL"是`HEAD`中的版本.`BACKUP`是在调用`mergetool`之前在磁盘上的版本.它可能包含diff3冲突标记,您可能在调用`mergetool`之前编辑了它. (9认同)
  • LOCAL/REMOTE这个词有点误导,让我觉得他们指的是"我的变化"/"远程变化",但实际上通常在"合并到主人"的上下文中,LOCAL是目标分支,这是其他的修改,和REMOTE是我的修改的源分支.:) (7认同)
  • 另见:http://stackoverflow.com/questions/11133290/git-merging-using-meld (2认同)

Fir*_*ald 14

如果更改从在线存储库中提取(合并)到本地副本中,您可以将 REMOTE、LOCAL 和 BASE 理解为:

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

在此处输入图片说明

这些术语是从“本地”所指的在线存储库角度来看的。另请参阅维基百科关于三向合并的文章。

  • 支持使用图形。这些东西很难理解的原因是大多数合并工具只使用文本。而且,CLI 并不能替代图表来让 GIT 变得有意义。我希望我能投票更多次。(有些人需要承认 CLI 是众多工具之一,而不是唯一的工具,有时它是错误的工具。) (4认同)
  • 有什么改变吗?我已经对此进行了测试,本地文件包含“由我完成”,远程文件包含“由其他人完成”。在 TortoiseGit 和 `git mergetool` 中。 (4认同)
  • 该图形还使得在我自己的本地存储库中进行合并时更有意义。如果“远程”提交实际上是我的“本地”存储库中的提交,“本地”和“远程”是令人困惑的名称。太多的名字在 git 中有多重含义。 (3认同)

小智 10

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

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

然而,rebase 命令和 merge 命令之间似乎存在差异。

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

变基使用您的本地分支作为远程分支,并将您要变基的分支作为本地分支