git pull命令输出消息意味着进入哪个分支

git pull命令输出消息意味着进入哪个分支,git,git-branch,git-pull,git-remote,Git,Git Branch,Git Pull,Git Remote,假设远程回购上有一个远程分支br1签出,本地回购上有一个master分支 命令1:如果我执行“git pull origin br1:br1”,它将远程br1拉入本地br1,并显示: 9188a5d..97d4825 br1->br1 9188a5d..97d4825 br1->原点/br1 命令2:如果我只执行一个“git pull”,它会将远程br1拉入本地master,但它只显示以下内容: 9188a5d..97d4825 br1->原点/br1 我希望它也会显示类似“br1-

假设远程回购上有一个远程分支
br1
签出,本地回购上有一个
master
分支

  • 命令1:如果我执行“
    git pull origin br1:br1
    ”,它将远程
    br1
    拉入本地
    br1
    ,并显示:
    
    9188a5d..97d4825 br1->br1
    9188a5d..97d4825 br1->原点/br1
    

  • 命令2:如果我只执行一个“
    git pull
    ”,它会将远程
    br1
    拉入本地
    master
    ,但它只显示以下内容:
    
    9188a5d..97d4825 br1->原点/br1
    

我希望它也会显示类似“
br1->master
”的内容。为什么它没有显示这一点

br1->br1
”是否意味着将远程
br1
拉入本地
br1

那“
br1->origin/br1
”是什么意思

更新:在VonC的帮助下,我得出了以下结论:

  • git pull
    更新所有跟踪分支
    br1->origin/br1
    表示遥控器上的
    br1
    被拉入本地跟踪分支
    origin/br1

  • git拉入原点br1:br1
    将远程
    br1
    拉入本地
    br1
    原点/br1
    。之后的消息意味着相同的变更集也被拉入当前签出分支(消息是
    更新…
    ,它不显示
    br1->master
    ):
    
    $git拉起点br1:br1
    beb48a4..b344dd1 br1->br1
    beb48a4..b344dd1 br1->原点/br1
    更新cca5a9b..b344dd1
    快进
    文件2 | 0
    文件3 | 0
    4个文件已更改,0个插入(+),0个删除(-)
    

  • 以前我认为git pull拉入本地主机。事实并非如此。就是说,
    git-pull-origin br1:br1
    做到了这一点


更新2:根据torek的解释,具体问题是命令
git pull origin br1:br1
在一系列其他操作之后将远程
br1
拉入
FETCH\u HEAD
,然后将
FETCH\u HEAD
合并到当前分支上

任何带有
origin/xxxx
的行表示a(is+)的
git fetch
部分已更新a。
从那时起就是这样

如果我只做一个“git拉”,它会将远程br1拉入本地主服务器

这取决于
git config branch.b1.merge
,它指示
git pull
的git merge部分在哪里合并。
通过执行
git pull b1:b1
,您将覆盖该配置并指示合并在本地
b1
分支中进行

另请参见的结果,以查看哪个本地分支正在跟踪哪个远程分支

我希望它也会显示类似“br1->master”的内容。为什么它没有显示这一点


可能
master
已经在
97d4825

警告:长。TL;DR版本:您正在查看
git-fetch
输出,
git-fetch
根本不会影响您的
master
,影响您的
master
的是
git-merge
部分。但是,您的
git fetch
正在更新远程跟踪分支
origin/br1
,在一种情况下更新甚至创建本地分支
br1

git pull
是一个方便的脚本 始终记住,
git pull
只是一个方便的脚本,它为您运行另外两个git命令:首先,
git pull
将您的参数传递给
git fetch
。完成后,
git pull
将运行
git merge
(或者,如果有指示,
git rebase
),但原始问题中引用的所有操作都纯粹发生在
git fetch
中。(在“更新”部分有一点来自于
git merge
,我稍后会谈到。)

如果未向
git pull
提供远程参数,则
pull
脚本将从当前分支的配置中提取一个远程参数。在这种情况下,它提取的一个显然是
origin
。因此,如果运行
git-pull
而不指定
origin
,实际上就是在运行
git-pull-origin

如果您没有为
git pull
提供refspec参数,那么
pull
脚本将从当前分支的配置中提取一个非常简单的参数,在本例中,无论您从
git config--get branch.master.merge
中看到什么,它显然是
br1
。因此,这意味着如果运行
git pull origin
,实际上就是在运行
git pull origin br1
.1

同样,所有这些都被传递到
git fetch
,因此无论您运行
git pull
git pull origin
、还是
git pull origin br1
,所有这些都会调用:

git fetch origin br1
(您也可以手动执行此操作,您将看到上面的内容)

稍后,我们将在下面访问git fetch origin br1:br1

关于可能的误解的背景 让我们再次简要地看一下您的设置语句:

假设远程回购上有一个远程分支
br1
签出,本地回购上有一个
master
分支

当前在远程上签出的分支(如果有)与
fetch
基本无关。
fetch
要做的第一件事(或足够早的一件事)是连接到远程设备,并要求它提供所有引用及其对应SHA-1的列表(通过运行
git ls remote
,您可以看到
git fetch
可以看到什么)。遥控器的
HEAD
包含在该列表中,这允许您指示
fetch
使用它,但如果您不这样做,您的
fetch
只会忽略它(遥控器)
$ git fetch origin
9188a5d..97d4825  br1        -> origin/br1
* branch            name       -> FETCH_HEAD