我正试图从我的Git工作区推送到Github,但我添加和提交的更改似乎没有上传。
然后,做一个“git branch”我得到的东西看起来像这样:
git branch
* (no branch)
master
愚蠢的是,我以为我可以用回到主人那里
git checkout master
现在我的变化似乎已经消失了。我的主要分支大约三天。似乎没有办法切换回这个(没有分支)。
我查看了这个问题Git : seemed to be in “(no branch)” and then lost my changes,其中答案建议执行git reflog show
后检查。我试过了,我得到了这个:
$ git reflog
0f27ae7 HEAD@{1}: checkout: moving from HEAD to master
7b8ee7b HEAD@{2}: commit: 14/05/2017 3:33pm
ff60409 HEAD@{3}: commit: 14/05/2017 3:33pm
0f27ae7 HEAD@{4}: checkout: moving from master to 0f27ae7236aabbe8cccfba82e201e36368a05054
0f27ae7 HEAD@{5}: commit: 11/05/2017 2:33pm
3e4c616 HEAD@{6}: merge origin/master: Fast-forward
1e79818 HEAD@{7}: commit: 10/5//2017 UI
我试图从0f27ae7236aabbe8cccfba82e201e36368a05054
结帐,但我的更改没有回来。我想要的是恢复我做的最后一次提交(没有分支)(提交:14/05/2017 3:33 pm)。
以下是git branch -a
的结果:
$ git branch -a
* (HEAD detached from 0f27ae7)
UI_linking
master
remotes/ado/newBranch
remotes/origin/UI_linking
remotes/origin/frogs1
remotes/origin/master
remotes/origin/newBranch
remotes/origin/newMas
我的更改是否丢失了?或者有办法恢复它们吗?
答案 0 :(得分:3)
从git reflog
的输出我会说你的更改是在提交7b8ee7b
(HEAD@{2}
)。
以下命令:
git branch lost 7b8ee7b
git checkout lost
应该在上述提交中创建一个新分支(名为lost
),然后检查它。
然后你可以这样做:
git rebase master
git checkout master
git merge --ff lost
将您恢复的两个提交移到master
分支的顶部,并使它们显示为master
分支历史记录的一部分。
如果一切正常,那么您可以运行git branch -d lost
来移除lost
分支。
答案 1 :(得分:0)
您可以在git checkout 7b8ee7b
恢复您的状态,其中7b8ee7b
是您的reflog中HEAD@{2}
下的哈希值 - 您切换到master之前的哈希值。
发生了什么:由于某种原因你从主分支切换到0f27ae7236aabbe8cccfba82e201e36368a05054
并最终处于“分离头”状态。你做了一些提交,但那些不在任何分支上。这些提交仍然存在,您可以在reflog中看到它们。
虽然0f27ae7236aabbe8cccfba82e201e36368a05054
是您的主人所指向的,但当您切换到哈希时,您不会切换到指向该提交的任何分支。
答案 2 :(得分:0)
原因是:您将分支推送到没有分支,宣布一些警告,但您忽略了它们。现在,这个代码分离到HEAD.So你的新修改代码将在HEAD~上。你可以在relog中看到:
0f27ae7 HEAD @ {4}:checkout:从master转移到0f27ae7236aabbe8cccfba82e201e36368a05054
将其取回的方法:
git fetch origin
git checkout remotes / origin / master
git merge HEAD @ {1}
现在,你在主人那里得到了你的代码。
此致