git在分离头下后回到原来的主人

时间:2017-11-24 06:28:03

标签: git

我想查看旧版本的文件。我做了一件坏事,在主分支上检查出来,创建了一个独立的头,然后提交了一个新版本。

这导致我不明白的情况。我无法弄清楚如何回到原始存储库 - 看起来好像我丢失了一些提交。经过一番搜索后,我发现“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

1 个答案:

答案 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