我假设LOCAL和REMOTE文件的名称已经说明了它们各自的含义,但是BASE和BACKUP指什么呢?
Git执行三向合并,找到你正在合并的两个分支的共同祖先(也称为“合并基础”)。当您在冲突上调用git mergetool
时,它会产生这些文件,适合传入典型的3向合并工具。因此:
foo.LOCAL
: 冲突“ours”的一方 - 即您的分支(HEAD
),将包含合并结果foo.REMOTE
: 冲突“theirs”的一方 - 您正在合并到HEAD
的分支foo.BASE
: 共同的祖先。适用于传入三向合并工具foo.BACKUP
: 在调用合并工具之前的文件内容,如果mergetool.keepBackup = true
,将保留在文件系统中。如果从在线代码库中拉取(合并)更改到本地拷贝中,你可以理解 REMOTE、LOCAL 和 BASE 分别表示:
REMOTE
= 包含自己修改的本地文件(“在文件系统上”)LOCAL
= 在线代码库中的远程文件(“其他用户所做的更改”)BASE
= 两个文件的起点(“没有任何修改”)git mergetool
中都是如此。 - bart我同意@Shanakor的观点,其中一个答案是错误的。
所谓的本地或远程
基本上指的是git在“检出/切换分支”方面的操作。
如果您当前在A分支,并且运行git merge B
,则git在merge
命令中保留在您的A分支,因此本地是A;
如果您当前在A分支,并且运行git rebase B(或rebase --onto B)
,则在内部,git会检出/切换到B,因此本地当然是B;
请参见:https://git-scm.com/docs/git-rebase
引用:
如果指定了<base>
,则git rebase将在执行任何其他操作之前执行自动git switch。否则,它将保留在当前分支。
LOCAL
”是“HEAD
”版本中的版本。在调用“mergetool
”之前,“BACKUP
”是磁盘上的版本。它可能包含diff3冲突标记,并且您可能在调用“mergetool
”之前对其进行了编辑。 - Edward Thomson