git - 很难理解 git-fetch

标签 git git-fetch

我很难理解 git-fetch 的细微差别。我明白做 fetch , 将远程引用提取到本地跟踪分支中。

不过我有几个问题:

  1. 有没有可能不存在本地跟踪分支?如果是这样,它会自动创建吗?

  2. 如果我执行 fetch 会发生什么并指定一个非跟踪分支作为目的地?

  3. 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/masterorigin 仓库中 ma​​ster 的远程跟踪分支。

通常您执行 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 上的 ma​​ster 相同。所有其他远程跟踪分支机构也是如此。

关于git - 很难理解 git-fetch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1070496/

相关文章:

java - gitignore 不会忽略已经提交的文件吗?

git-flow:如何从原点 check out 发布分支?

git clone vs 复制粘贴,有什么区别?

Git fetch origin 与 git fetch --all

ruby-on-rails - Git 推送到 github : failed to read object 失败

git - 在 Windows Server 2012 R2/IIS 上运行 Git 服务器

git - 如果不是最新的,则防止 git push 发送整个 repo

Git rebase master 和多个分支

git - 如何在调用 git fetch 后查看更改的文件

git - 为什么 git fetch 不下载任何东西?