2

例如,在 Linux Kernel 的 git 工作树中。

$ git checkout v2.6.6
$ git checkout v3.3

如何在当前分支 v3.3 中找到最后一个头名或 HASHID?在上面的示例中,它应该获得 v2.6.6 或 v2.6.6 的 HASHID。

谢谢。

4

2 回答 2

5

每次移动头部时,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
于 2012-08-21T01:51:34.117 回答
2

扩展 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 可以轻松浏览您的历史记录。

于 2012-08-21T03:36:24.897 回答