Git:似乎处于“(无分支)”状态,然后丢失了我的更改

Git:似乎处于“(无分支)”状态,然后丢失了我的更改

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

然后,执行“git branch”我得到了如下内容:

git branch
* (no branch)
  master

愚蠢的是,我以为我可以通过

git checkout master

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

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

答案1

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

git reflog show

这应该会向您显示发生了什么,以及丢失的节点的 ID。

答案2

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

$ 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

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

checkout: moving from master to ca92d15d272867b63d54f96d4aa57f8ecc479cd0

ca92d15d272867b63d54f96d4aa57f8ecc479cd0 是显示为(无分支)的匿名分支。要恢复它,只需执行 git checkout,您的旧伪分支就会恢复。

为了安心,我建议在你意外 gc 它之前备份你的 git 存储库。

答案3

# if you have already checked out to master, 
# you won't know the commit-ish of your "no branch":

git fsck --lost-found # (to find your <commit-ish>)
git merge <commit-ish>

# if you are still on your "no branch" commit:

git log # (the commit-ish will be on the first line)
git checkout master
git merge <commit-ish>

# or

git log | head -n 1 | cut -d ' ' -f 2 | pbcopy
git checkout master
git merge <commit-ish>

相关内容