Git Fetch和Local Branches

时间:2014-02-21 22:32:20

标签: git github

所以我对git fetch confused感到困惑。当我拿起遥控器时,它说有5个新分支:

From https://github.com/***************
 * [new branch]      ca*****  -> **********
 * [new branch]      ma*****  -> **********
...
 * [new tag]         v***     -> v***

然而,如果我在我的本地系统上做git branch,他们就不在那里。显然我不理解git fetch,阅读手册并没有帮助我理解我对git的了解。有人能给我一个关于获取的简短解释吗?

2 个答案:

答案 0 :(得分:1)

git fetch你有“遥控器”。通常的第一个遥控器是origin,但可能还有更多。

通常使用git,人们都有分支机构。

远程存储库通常是一个git存储库,这意味着......它有分支。

假设您决定创建一个其他人没有使用的新分支,供您自己使用。你巧妙地称之为branch。唉,现在Joe有完全相同的想法,并将他的分支称为branch,然后将其推送到您在origin共享的存储库。

然后你运行git fetch origin(或git fetch,使其达到origin,同样的事情)。并且......它带来了Joe的branch

您的分支会怎样?

答案是:什么都没有!这是关于git分支的好处:你的本地分支机构是你的,你的本地分支机构,只有你可以影响它们。

但是如果你想使用“他们的”分支怎么办?好吧,当你的git咨询他们的并获得“他们的”分支列表时,它重命名它们。如果您从origin获取分支,并且在那里有一个名为branch的分支,git会将您的副本更改为“远程分支”,并将其命名为origin/branch。如果您有更多遥控器,则远程branch上的分支another将变为another/branch

所以,origin/cawhatever是“分支cawhatever”的“副本”,就像最后一次在名为origin的遥控器上看到的那样,你的git最后一次有机会去那里看看那里有什么Git在fetchpush操作中更新这些操作(尽管在旧版本的git中,如果以git pull的方式运行它,它会抑制“远程分支”的更新)。


完整的故事有点长:您的本地分支机构有一个以refs/heads/开头的“全名”。这基本上是一个“目录”或“文件夹”,其中包含分支名称(和/或具有更多分支名称的子目录)。远程分支位于“目录”refs/remotes/下方的空间中。这保证了你和他们的永远不会碰撞。但有时当您添加遥控器时,它可能会意外地与您制作的分支具有相同的名称。 (想想如果你创建一个名为origin的本地分支会发生什么!)在这种情况下,你必须拼出更长的名称形式(参见gitrevisions)。

标签位于refs/tags/下。内置的标签没有重命名,因此当您带上标签时,它们会与您自己的标签进入相同的名称空间。这使得使用标签更加精细,特别是如果你开始与许多不同的遥控器通话。

但是,在大多数情况下,只需将远程分支视为“我们上次检查的内容”。你可以让你的(本地)分支“跟踪”远程分支,然后git status将告诉你你的“前方”和/或“后方”有多远,从你的存储库中的“他们是什么”的副本我上次检查过“。

答案 1 :(得分:0)

您应该git checkout --track origin/<branch_name>然后执行git fetch origin

相关问题