我想查看旧版本的文件。我做了一件坏事,在主分支上检查出来,创建了一个独立的头,然后提交了一个新版本。
这导致我不明白的情况。我无法弄清楚如何回到原始存储库 - 看起来好像我丢失了一些提交。经过一番搜索后,我发现“reflog”可以用来查找最近提交的SHA,然后我将SHA检出到一个单独的分支中,并从那里开始工作直到我了解情况。
我知道(现在)在检查旧版本时,最好在分支上执行此操作。但是,我认为我开始了解git的整体想法,并希望了解更好的情况。
我的问题:有人可以通过做“结账大师”或“重置 - 硬”来描述为什么我似乎无法回到原始的回购状态,这样做的正确方法是什么? / p>
以下是导致神秘状态的命令序列:
git checkout 343294f125 myfile.txt
git checkout -- myfile.txt
git checkout master myfile.txt
git add file2
git commit
这些步骤似乎无法恢复原始存储库
git reset --hard
git checkout master
# git log still shows commits going back from 34329, not recent ones
答案 0 :(得分:0)
这些命令都不会导致头状态分离:
git checkout sha1 myfile.txt
git checkout -- myfile.txt
git checkout master myfile.txt
所有这些命令在某些修订版本中都会获得myfile.txt
的内容,而且这些命令都不会导致头状态分离。
第一个从版本myfile.txt
获得sha1
,放入工作树并添加到索引中。当您要将特定文件还原到某个先前状态时,这非常有用。
第二个命令从索引中获取文件。如果您对文件进行了一些更改,而没有将更改添加到索引,并且您希望将文件还原到索引上的状态,则此选项非常有用。请注意,索引可能与上一版本不同。
第三个命令从master
分支获取文件。
当您仅使用sha1或分支或标记运行结帐时,您将进入分离的头状态,而不指定任何文件。也就是说,git checkout sha1
(并且没有路径参数)。
在这种模式下,Git将工作目录置于指定sha1 / branch / tag中的状态。
如果你处于分离头状态,你可以用git checkout
摆脱它。你可以签出一些现有的分支,或者从分离的头部创建一个新的分支,有效地为它命名,git checkout -b somenewbranch
。