【发布时间】:2019-10-30 03:28:50
【问题描述】:
我一直在玩 git 并坚持使用 git fetch 的概念。
我已经尝试并观察到以下场景:
1)
$ git fetch
获取所有远程分支并更新所有相应的远程跟踪分支。我知道它查看 .git/config 文件并使用默认远程存储库位置和默认获取 refspec,通常为“refs/heads/:refs/remotes/origin/”。它不会快进任何本地分支。
2)
$ git fetch origin
观察与 1) 相同
3)
$ git fetch origin master
仅获取 master 分支并更新远程跟踪分支 origin/master。不快进本地 'master' 分支。
4)
$ git fetch origin master:master
仅获取 master 分支并更新远程跟踪分支 origin/master。快进本地“master”分支。
理解 1) 和 2) 很简单。然而 3) 和 4) 让我感到困惑。
fetch 命令对本地分支有什么作用?为什么它快进本地分支? (影响本地分支的证明是当我尝试git fetch origin master:master时,在签出master分支时,它会抛出以下错误:fatal: Refusing to fetch into current branch refs/heads/master of non-bare repository)
根据我的直觉,在任何类型的 fetch 命令上,更新远程跟踪分支都是默认行为。然而,当git fetch origin master 被执行时,它具有更新FETCH_HEAD 的附加行为。当git fetch origin master:master 被执行时,它有一个更新本地分支'master'的附加行为。我的直觉对吗?
它是否将git fetch origin master:master 解释为git fetch origin refs/heads/master:refs/heads/master? (可能对我之前的问题是多余的)
它是否将git fetch origin master 解释为git fetch origin refs/heads/master:?
【问题讨论】:
标签: git version-control git-fetch