所以我对git fetch
confused感到困惑。当我拿起遥控器时,它说有5个新分支:
From https://github.com/***************
* [new branch] ca***** -> **********
* [new branch] ma***** -> **********
...
* [new tag] v*** -> v***
然而,如果我在我的本地系统上做git branch
,他们就不在那里。显然我不理解git fetch
,阅读手册并没有帮助我理解我对git的了解。有人能给我一个关于获取的简短解释吗?
答案 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在fetch
和push
操作中更新这些操作(尽管在旧版本的git中,如果以git pull
的方式运行它,它会抑制“远程分支”的更新)。
完整的故事有点长:您的本地分支机构有一个以refs/heads/
开头的“全名”。这基本上是一个“目录”或“文件夹”,其中包含分支名称(和/或具有更多分支名称的子目录)。远程分支位于“目录”refs/remotes/
下方的空间中。这保证了你和他们的永远不会碰撞。但有时当您添加遥控器时,它可能会意外地与您制作的分支具有相同的名称。 (想想如果你创建一个名为origin
的本地分支会发生什么!)在这种情况下,你必须拼出更长的名称形式(参见gitrevisions)。
标签位于refs/tags/
下。内置的标签没有重命名,因此当您带上标签时,它们会与您自己的标签进入相同的名称空间。这使得使用标签更加精细,特别是如果你开始与许多不同的遥控器通话。
但是,在大多数情况下,只需将远程分支视为“我们上次检查的内容”。你可以让你的(本地)分支“跟踪”远程分支,然后git status
将告诉你你的“前方”和/或“后方”有多远,从你的存储库中的“他们是什么”的副本我上次检查过“。
答案 1 :(得分:0)
您应该git checkout --track origin/<branch_name>
然后执行git fetch origin