在标签列表中喜欢
v001
v002
v003
v004
v005
我通过 git fetch --tags
和 git checkout v006
提取了新标签让我们说 v006
。
我错误地没有注意到在这次新 checkout 之前 checkout 了哪个版本(git describe --tags
)。似乎有错误,我必须恢复到旧标签。我怎么知道使用了哪个标签?
最佳答案
HEAD
reflog 记录每个成功的 checkout 以及文本“从(点 A)移动到(点 B)”,例如:
$ git reflog
676699a HEAD@{0}: checkout: moving from
695326c489285ed5678ac04d58289bcb24019bb9 to tag2
695326c HEAD@{1}: checkout: moving from master to tag1
在这种情况下,我从 master
开始,然后执行 git checkout tag
,然后执行 git checkout tag2
。 (注意:我稍微编辑了输出以使其更适合发布。如果您将 git 设置为通过“less”进行管道传输,您可能需要在窗口中向左/向右滚动才能看到所有内容。)
第一行输出(我把它包裹起来,所以它是第三个引用行)有一个原始的 SHA-1,因为当你检查一个不是分支的引用时(或者,当你使用 --detach
带有一个分支)你会得到一个“分离的 HEAD”,其中 HEAD
文件记录了一个原始提交 SHA-1。但是,我们可以从下一行中看出 695326c489285ed5678ac04d58289bcb24019bb9
是标签 tag1
的 SHA-1。
注意:你说“似乎有错误,我必须恢复到旧标签”,并引用(通过 Stack Overflow 标签)git-revert。然而,这些类型的 git checkout
(通过标签或 SHA-1)是关于查看一些其他版本(即,将特定版本放入您的工作目录)。 git revert
命令是关于添加一个新 提交,其作用是撤消一些旧 提交。
一般来说,如果您“在一个分支上”,您只想git revert
(例如,git checkout master
或 git checkout develop
或其他一些分支名称),并且您发现有人向该分支提交了不正确的代码,并且需要“反向应用”他们之前的更改并进行新的提交(然后您可能会发布, git push
或提出 pull 请求)。因此,当您一直在查看旧版本时,回到“还原”似乎很奇怪。
关于git - 如何知道之前 checkout 的标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21935216/