Github发布/标签没有在本地出现?

时间:2017-04-11 08:04:36

标签: git github

我将一些代码推送到远程存储库,然后在GitHub上创建了第一个版本,并为其提供了标题' v0.0.1'。 GitHub现在显示我现在有一个版本,并且还显示了'标签'我有一个标签' v0.0.1'。

然后我执行了git pull origin master来更新本地仓库并返回“已经是最新的。”#39;现在如果我输入git tag没有任何反应。那么为什么这个标签不会出现在本地?

1 个答案:

答案 0 :(得分:2)

此处的问题是git pull origin master实际上跟git fetch origin master一起运行git merge origin/mastergit fetch步骤对git fetch提供了太多限制,阻止其获取您的代码。如果您自己运行git fetch origin甚至只是git fetch,您将获得该标记。

背景

请注意,git pull运行的第一个命令 - git fetch origin master - 使用两个单独的参数originmaster,而第二个参数不会;相反,它有这个奇怪的斜线:git merge origin/master。这完全归功于历史:git pull首先出现在2005年左右,结果证明做得太多而且做得不太好;所以提供了一个单独的,更有用的git fetch作为标准的面向用户的命令。大约在这个时候,"遥控器"的整个概念被发明。名称origin本身就是其中一个遥控器。

遥控器附带远程跟踪分支,而origin/master中包含斜杠,是这些远程跟踪分支之一。尽管有"远程"在这里,一个"远程跟踪分支"实际上只是你自己(本地)存储库中的另一个名称:它是你Git的方式记住你在另一个(原点)Git上看到的你的 Git,上次你的Git与他们谈过。

在开始时(2005-ish再次),你必须运行git pull <url> <branch>,这就是为什么两者是分开的。没有遥控器,也没有远程跟踪分支,所以你必须让你的Git通过URL调用他们的Git,获取他们的分支,然后立即将结果合并到你的分支。因此,您可以通过Internet电话命名用于调用Git的URL,然后将命名为分支。

您现在可以使用根本没有参数运行git fetch,这将调用origin(您的Git使用您的姓名origin来保存网址)在互联网电话上获取所有内容,然后使用标签和远程跟踪分支记住所有内容。在那之后,git merge 完全没有参数通常会做正确的事情:如果你在master它将合并origin/master,这是你的Git从他们的Git中记得什么。但是git pull继续存在,部分原因是在git fetch之后,您通常希望至少再执行一次Git命令,git pull执行git fetch再一个Git命令 - 它仍然使用相同的旧语法:一个URL(但现在你可以使用&#34;远程&#34;名称),然后是分支的名称,如上所示Git at the URL

我对Git新手的建议是:永远不要使用git pull;你的Git生活会更快乐。 似乎很方便,但它却为那些不知情的人提供了所有这些陷阱。例如,您运行的第二个命令通常应为git rebase,而不是git merge找出使用哪个命令的方法是运行git fetch然后git log - 但git pull要求您事先决定 是否要重新定位或合并,之前你要看哪个更好。