我很难理解 git-fetch 的细微差别。我明白做 fetch
, 将远程引用提取到本地跟踪分支中。
不过我有几个问题:
有没有可能不存在本地跟踪分支?如果是这样,它会自动创建吗?
如果我执行
fetch
会发生什么并指定一个非跟踪分支作为目的地?git-fetch 的手册页指定:
git-fetch <options> <repository> <refspec>
我如何使用 refspec 从我的远程 master 获取内容到它的远程跟踪分支?我相信如果我当前的 HEAD 在 master 上并且我运行,这可能是可能的
git fetch origin master
但是,我可以使用 <+?src:dest>
吗? refspec 实现同样的事情?我认为这将帮助我更好地理解这些概念。
还有一个问题:
我的 .git/config 文件包含以下用于获取的行(仅显示相关行):
fetch = +refs/heads/*:refs/remotes/origin/*
谁能解释一下这行到底是什么意思?
最佳答案
首先,没有“本地跟踪”分支的概念,只有“远程跟踪”分支。所以 origin/master 是 origin 仓库中 master 的远程跟踪分支。
通常您执行 git fetch $remote
更新所有远程跟踪分支,并在需要时创建新分支。
但是,您也可以指定一个 refspec,但这不会触及您的远程跟踪分支,相反,它会获取您指定的分支并将其保存在 FETCH_HEAD
上,除非您指定了目的地。一般来说,您不想弄乱它。
最后:
fetch = +refs/heads/*:refs/remotes/origin/*
这意味着如果你这样做
git fetch origin
它实际上会做:
git fetch origin +refs/heads/*:refs/remotes/origin/*
这意味着远程 heads/foobar 将是本地 remotes/origin/foobar,加号表示即使速度不快也会更新-转发。
因此你的本地 origin/foobar 将始终与 origin 远程上的 foobar 相同(在运行 git fetch
)。 origin/master 显然与 origin Remote 上的 master 相同。所有其他远程跟踪分支机构也是如此。
关于git - 很难理解 git-fetch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1070496/