我将一些代码推送到远程存储库,然后在GitHub上创建了第一个版本,并为其提供了标题' v0.0.1'。 GitHub现在显示我现在有一个版本,并且还显示了'标签'我有一个标签' v0.0.1'。
然后我执行了git pull origin master
来更新本地仓库并返回“已经是最新的。”#39;现在如果我输入git tag
没有任何反应。那么为什么这个标签不会出现在本地?
答案 0 :(得分:2)
此处的问题是git pull origin master
实际上跟git fetch origin master
一起运行git merge origin/master
。 git fetch
步骤对git fetch
提供了太多限制,阻止其获取您的代码。如果您自己运行git fetch origin
甚至只是git fetch
,您将获得该标记。
请注意,git pull
运行的第一个命令 - git fetch origin master
- 使用两个单独的参数origin
和master
,而第二个参数不会;相反,它有这个奇怪的斜线: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
要求您事先决定 是否要重新定位或合并,之前你要看哪个更好。