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

k75qkfdt  于 2023-05-21  发布在  Git
关注(0)|答案(4)|浏览(575)

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

iqxoj9l9

iqxoj9l91#

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

  • foo.LOCAL:冲突的“我们”一方-即,您的分支(HEAD)将包含合并的结果
  • foo.REMOTE:冲突的“他们的”一方-您要合并到HEAD中的分支
  • foo.BASE:共同祖先。用于馈送到三向合并工具
  • foo.BACKUP:调用合并工具之前的文件内容,如果是mergetool.keepBackup = true,则将保留在文件系统上。
fslejnso

fslejnso2#

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

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

这些术语是从在线存储库的**Angular **提出的,也就是“本地”所指的。另请参阅维基百科关于三方合并的文章。

kmbjn2e3

kmbjn2e33#

根据https://git-scm.com/docs/git-mergetool
当使用这个工具调用git mergetool时(通过-t或--tool选项或merge.tool配置变量),配置的命令行将被调用,$BASE设置为包含合并公共库的临时文件的名称(如果可用);$LOCAL设置为包含当前分支上文件内容的临时文件的名称;$REMOTE设置为包含要合并的文件内容的临时文件的名称,$MERGED设置为合并工具应将合并解析结果写入其中的文件的名称。
但是,在rebase命令和merge命令之间似乎有区别。
合并使用您的本地分支作为LOCAL,而您正在合并的分支作为REMOTE
Rebase使用你的本地分支作为REMOTE,而你正在rebase到的分支作为LOCAL

nle07wnf

nle07wnf4#

我同意@Shanakor,其中一个答案是错误的。所谓的local or remote基本上是指git在“ checkout /切换分支”方面所做的事情。如果你当前在分支A,并且运行git merge B,git会停留在分支A for merge命令中,所以local是A;如果你当前在分支A,运行git rebase B, (or rebase --onto B),在内部,git check out /切换到B,那么本地当然是B;
参见:https://git-scm.com/docs/git-rebase
Quote:如果指定了,git rebase将在执行其他操作之前执行自动git切换。否则,它将保留在当前分支上。

相关问题