例如,在 Linux Kernel 的 git 工作树中。
$ git checkout v2.6.6
$ git checkout v3.3
如何在当前分支 v3.3 中找到最后一个头名或 HASHID?在上面的示例中,它应该获得 v2.6.6 或 v2.6.6 的 HASHID。
谢谢。
例如,在 Linux Kernel 的 git 工作树中。
$ git checkout v2.6.6
$ git checkout v3.3
如何在当前分支 v3.3 中找到最后一个头名或 HASHID?在上面的示例中,它应该获得 v2.6.6 或 v2.6.6 的 HASHID。
谢谢。
每次移动头部时,git 都会将其记录在reflog
.
$ git reflog
如果您要在问题中的命令之后运行此命令,则旧的提交哈希将位于第二行,并将引用您要移动到的标签。
例如
ff06760 HEAD@{0}: checkout: moving from 9b49c22462f5dd73ff18eacff5983f141f98cb82 to v3.3
9b49c22 HEAD@{1}: checkout: moving from ff06760cd0db8cef49915e68886c66c09b1cade1 to v2.6.6
扩展 Blake Taylor 的答案,最后一个HEAD
位置总是HEAD@{1}
,但这种类型的修订规范比这强大得多:
git checkout HEAD@{n} ;# checkout the nth prior position of HEAD
git checkout HEAD@{"1 hour ago"} ;# checkout HEAD an hour back
git checkout master@{"yesterday"} ;# checkout yesterday's master
git checkout master@{"1 week ago"} ;# checkout last week's
git checkout @{-1} ;# checkout the last branch checked out
git checkout @{-n} ;# checkout the nth last branch
和我个人最喜欢的:
git checkout :/"<regex>" ;# checkout the youngest commit matching <regex>
……等等什么?这个语法很棒:
git checkout :/"Case 959" ;# see the state when we fixed case 959
git checkout :/"ct/topic" ;# checkout the state when 'ct/topic' was merged
git checkout :/"^Hotfix" ;# checkout the most recent commit that started 'Hotfix'
了解这些 refspecs 可以轻松浏览您的历史记录。