如果我在没有创建分支的情况下检查我的源代码的标记版本,Git表示我根本没有与任何分支相关联.我很高兴让我做出改变并检查它们.这些变化在哪里?如果我切换回'master',它们就会消失(被master中的东西覆盖),我似乎无法再找到它们.是什么赋予了?如果Git允许我对基本上是匿名分支的内容进行更改,那么我肯定可以取回它们吗?
因为您的提交不在任何分支上,所以除非您使用其SHA1签出该特定提交,否则您无法在工作目录中看到它.您可以通过查看reflog
从回购中检出的内容的变化来查找提交.如果你的标签是XXX
你会看到类似的东西:
$ git reflog 7a30fd7... HEAD@{0}: checkout: moving from master to XXX ddf751d... HEAD@{1}: checkout: moving from 96c3b0300ccf16b64efc260c21c85ba9030f2e3a to master 96c3b03... HEAD@{2}: commit: example commit on tag XXX, not on any branch 7a30fd7... HEAD@{3}: checkout: moving from master to XXX
这告诉你checkout
为了在工作目录中看到你的提交你必须使用SHA1 .
$ git checkout 96c3b03 Note: moving to "96c3b03" which isn't a local branch If you want to create a new branch from this checkout, you may do so (now or later) by using -b with the checkout command again. Example: git checkout -bHEAD is now at 96c3b03... example commit on tag XXX, not on any branch $ git checkout -b newbranch $ git branch #lists all branches feature1 master * newbranch
这一切对我来说似乎有点奇怪,直到我意识到git checkout
将所有项目文件作为特定提交放入我的文件系统(工作目录).实际上,工作目录充当本地Git存储库上的浏览器.因此,您的更改尚未在存储库中被覆盖,当您检出主服务器时,它们只是没有显示在您的工作目录中.
是的,他们将在reflogs中.
您可以随时命名分支,如下所示:
git checkout -b my-branch-name
或者,您可以通过查找其SHA1(使用上面的git reflog)将提交合并回master而不使用新分支,然后:
git checkout master git merge SHA1