切换到另一个Git标记

我如何检查版本version/tag 1.1.4的rspec包?

cd ~/Library/Application\ Support/TextMate/Bundles/
git clone git://github.com/rspec/rspec-tmbundle.git RSpec.tmbundle
osascript -e 'tell app "TextMate" to reload bundles'
294123 次浏览

正常克隆存储库:

git clone git://github.com/rspec/rspec-tmbundle.git RSpec.tmbundle

然后像这样签出你想要的标签:

git checkout tags/1.1.4

这将以“分离HEAD”状态签出标签。在这种状态下,“您可以环顾四周,做出实验性的更改并提交它们,然后(放弃那些提交),而不会通过执行另一个签出来影响任何分支”。

要保留所做的任何更改,将它们移动到一个新的分支:

git checkout -b 1.1.4-jspooner

你可以使用以下命令返回到主分支:

git checkout master

注意,正如在这个答案的第一次修订中提到的,还有另一种方法来签出标签:

git checkout 1.1.4

但正如在评论中提到的,如果你有一个同名的分支,这将导致git警告你,refname是模糊的,并在默认情况下检出分支:

warning: refname 'test' is ambiguous.
Switched to branch '1.1.4'

如果存储库在分支和标记之间不共享名称,则可以安全地使用简写。

Git v2.23.0(2019年8月)开始,当你只是切换分支/标签时,git switchgit checkout更受欢迎。我猜他们这样做是因为git checkout有两个功能:切换分支和恢复文件。所以在v2.23.0中,他们添加了两个新命令git switchgit restore来分离这些关注点。我预测在未来的某个时候,git checkout将被弃用。

要切换到正常的分支,使用git switch <branch-name>切换到类似提交的对象,包括单个提交和标记,使用git switch --detach <commitish>,其中<commitish>是标记名或提交号。

--detach选项迫使您认识到您处于“检验和报废实验”模式。要从你要切换到的committe创建一个新分支,请使用git switch -c <new-branch> <start-point>

chharvey回答表示

要切换到类似提交的对象,包括单个提交和标记,请使用git switch --detach <commitish>,其中<commitish>是标记名或提交号。

实际上,Git 2.36 (Q2 2022)更清楚:错误信息由"git switch HEAD~4"(man)"已被澄清为建议“;--detach"需要的选项。

参见提交808213 b (25 Feb 2022) by Alex Henrie (alexhenrie)
(由Junio C Hamano—gitster提交061年fd57中合并,06 Mar 2022)

switch:在由于缺少分支而死亡时提到--detach选项

署名:Alex Henrie

习惯做git checkout <tag>(man)的用户认为git switch <tag>(man)会做同样的事情。
告诉他们--detach选项,这样他们就不会好奇为什么git switch不能工作,而git checkout可以

git config现在在它的手册页中包含:

suggestDetachingHead

git switch拒绝分离HEAD时显示的建议 没有显式的--detach选项

错误信息将显示:

a branch is expected, got tag 'xxx'
If you want to detach HEAD at the commit, try again with the --detach option