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
表示远程跟踪分支还是上游分支

  • Git的版本控制

    但是Git怎么知道合并这些特定的分支呢?答案 来自配置文件:

    [branch "master"]
            remote = origin
            merge = refs/heads/master
    
    换言之,这为Git提供了两条关键信息:When
    master
    是当前已签出的分支,请使用
    原点
    作为默认远程 在获取(或拉取)期间从中获取更新。 此外,在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,例如,有时需要获取标记,有时不需要获取标记