【发布时间】:2014-03-23 00:20:09
【问题描述】:
在标签列表中
v001
v002
v003
v004
v005
我通过git fetch --tags 和git checkout v006 提取了新标签,比如说v006。
错误地,我没有注意到在新结帐之前签出了哪个版本 (git describe --tags)。似乎有错误,我必须恢复到旧标签。我怎么知道使用了哪个标签?
【问题讨论】:
标签: git revert git-revert
在标签列表中
v001
v002
v003
v004
v005
我通过git fetch --tags 和git checkout v006 提取了新标签,比如说v006。
错误地,我没有注意到在新结帐之前签出了哪个版本 (git describe --tags)。似乎有错误,我必须恢复到旧标签。我怎么知道使用了哪个标签?
【问题讨论】:
标签: git revert git-revert
HEAD reflog 会记录每次成功的结帐以及“从(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 命令是关于添加一个 new 提交,其效果是撤消一些 old 提交。
一般来说,如果您“在一个分支上”(如git checkout master 或git checkout develop 或其他分支名称),并且您发现有人向该分支提交了不正确的代码,您通常只想git revert,并且需要“反向应用”他们之前的更改并进行新的提交(然后您可能会发布,git push 或提出拉取请求)。所以当你一直在做的是查看旧版本时,恢复到“还原”似乎很奇怪。
【讨论】:
git reflog 向我展示了我需要知道的一切......非常感谢您