Git:似乎在“(无分支)”中,然后丢失了我的更改

int*_*tar 12 git

我试图从我的 Git 工作区推送到 Github,但我添加和提交的更改似乎没有上传。

然后,做一个“git branch”,我得到了这样的东西:

git branch
* (no branch)
  master
Run Code Online (Sandbox Code Playgroud)

愚蠢的,我以为我可以回到主人

git checkout master
Run Code Online (Sandbox Code Playgroud)

现在我的变化似乎已经消失了。我的主分支大约有一天大了。而且似乎没有办法切换回这个(没有分支)。

我的更改丢失了吗?或者有没有办法恢复它们?

CK.*_*CK. 14

只要你没有做过git gc,那么你就没有失去任何东西。您需要做的就是再次找到它:) 您会得到什么:

git reflog show
Run Code Online (Sandbox Code Playgroud)

这应该会告诉你发生了什么,以及丢失节点的 id。

  • 我会做 git reflog 而不指定主人。可能有与分支无关的提交,在这种情况下,这可能就是发生的事情。您可以将提交签出到新分支,以便它有一个路径。 (2认同)

小智 6

上面的答案是正确的。这就是我所做的:

$ git reflog
5b35f6d HEAD@{1}: pull github master: Fast forward
ca92d15 HEAD@{2}: checkout: moving from 759dab1b15731ce7680c26839ca470d20e709e36 to master
759dab1 HEAD@{3}: commit (merge): Merge branch 'master' of github.com:gonzojive/IODB-ui into HEAD
065e269 HEAD@{4}: commit: added fieldsets to snazzy form
f357606 HEAD@{5}: commit: preliminary support for google maps.
ca92d15 HEAD@{6}: checkout: moving from master to ca92d15d272867b63d54f96d4aa57f8ecc479cd0

$ git checkout ca92d15d272867b63d54f96d4aa57f8ecc479cd0
Run Code Online (Sandbox Code Playgroud)

“哦不!” 时刻是这样的:

checkout: moving from master to ca92d15d272867b63d54f96d4aa57f8ecc479cd0
Run Code Online (Sandbox Code Playgroud)

ca92d15d272867b63d54f96d4aa57f8ecc479cd0 是匿名分支,显示为(无分支)。要回到它,只需执行 git checkout 即可恢复旧的伪分支。

我建议您在意外 gc 之前备份您的 git 存储库,只是为了让您安心。