Git 没有分支;名称>;。merge`表示远程跟踪分支还是上游分支?
Git 没有分支;名称>;。merge`表示远程跟踪分支还是上游分支?,git,Git,branch..merge表示远程跟踪分支还是上游分支 Git的版本控制 但是Git怎么知道合并这些特定的分支呢?答案 来自配置文件: [branch "master"] remote = origin merge = refs/heads/master 换言之,这为Git提供了两条关键信息:Whenmaster 是当前已签出的分支,请使用原点作为默认远程 在获取(或拉取)期间从中获取更新。 此外,在git pull的合并步骤中,使用refs/heads/mas
branch..merge
表示远程跟踪分支还是上游分支
[branch "master"]
remote = origin
merge = refs/heads/master
换言之,这为Git提供了两条关键信息:Whenmaster
是当前已签出的分支,请使用原点
作为默认远程
在获取(或拉取)期间从中获取更新。
此外,在git pull的合并步骤中,使用refs/heads/master
从远程分支作为默认分支合并到此主分支
分支机构
引语说“在git pull的合并步骤中,使用
refs/heads/master
从远程作为要合并的默认分支
“在我看来
branch..merge
表示远程跟踪分支,而不是
上游分支
但是merge=refs/heads/master
中的refs/heads/master
看起来不一样
像一个远程跟踪分支(应该是
refs/remotes//master
),但似乎是一个主题分支
对我来说只是一个上游分支git config
的主页上显示
分支..合并
与branch..remote一起定义的上游分支
给定的分支
它似乎说,branch..merge
代表一个上游分支
而不是远程跟踪分支branch..merge
是否可能同时表示远程
跟踪分支和上游分支?我想不是
可能,因为远程跟踪分支及其对应的
上游分支可以有不同的基名,具体取决于
remote..fetch
已配置branch..merge
包含远程服务器上远程分支的名称:它是上游分支
如何说服自己这是真的:
假设分支origin/dev1
存在,但本地dev1
尚未存在,请运行以下操作:
git checkout dev1
git branch -m dev1 dev2
这些命令将dev1
设置为将origin/dev1
作为其上游,然后将其重命名为dev2
my.git/config
中的结果如下:
[branch "dev2"]
remote = origin
merge = refs/heads/dev1
现在,refs/heads/dev1
是我的沙盒中任何地方都不存在的东西,只是在远程上
根据评论中的讨论,对名称作了进一步澄清:
本地分支机构:master
或dev2
是可以从其上游分支机构获得更新的本地分支机构
远程跟踪分支:origin/master
或refs/remotes/origin/master
是本地存储的指针,指向上次git fetch
或git pull
时远程分支的状态
上游分支:这是远程服务器上真正的远程分支,而不是本地分支。简而言之,branch..merge
包含远程服务器上远程分支的名称:它是上游分支
如何说服自己这是真的:
假设分支origin/dev1
存在,但本地dev1
尚未存在,请运行以下操作:
git checkout dev1
git branch -m dev1 dev2
这些命令将dev1
设置为将origin/dev1
作为其上游,然后将其重命名为dev2
my.git/config
中的结果如下:
[branch "dev2"]
remote = origin
merge = refs/heads/dev1
现在,refs/heads/dev1
是我的沙盒中任何地方都不存在的东西,只是在远程上
根据评论中的讨论,对名称作了进一步澄清:
本地分支机构:master
或dev2
是可以从其上游分支机构获得更新的本地分支机构
远程跟踪分支:origin/master
或refs/remotes/origin/master
是本地存储的指针,指向上次git fetch
或git pull
时远程分支的状态
上游分支:这是真正的远程分支,位于远程服务器本身,而不是本地分支。
git config remote.origin.fetch
将向您显示将origin
remote上的refname映射到本地“远程跟踪分支”ref的“refspec”
默认值是
+refs/heads/*:refs/remotes/origin/*
它说,在origin上获取所有以“refs/heads/”开头的ref,并在本地重写中替换*
'd文本,因此refs/heads/master
是*
主控,这就是本地ref中*
的子目录,即“远程跟踪分支”ref1
配置文件指定分支的上游来自哪个存储库,以及该存储库中的refname是什么。当您去重新基址、拉入或合并并获取隐式上游时,Git会查看其源repo的分支名称和refspec,通常是origin
,并找出将映射到此存储库中的哪个ref
所以
本地分支master
跟踪origin
的分支master
,并从origin
获取分支到refs/remotes/origin/master
的映射,因此这就是历史的重基和拉取,可能还有一些其他人默认检查历史的发散点或发散点
1 leading
+
的意思是“如果提取放弃了历史记录,不要抱怨”,这当然正是您在跟踪遥控器的引用时希望提取操作的方式。有关其默认行为的更多信息,请参见fetch docs,例如,有时需要获取标记,有时不需要获取标记