提交已推送但仓库无显示,丢失4天工作请求技术协助
别慌!Git其实偷偷记录了所有你对仓库做的操作,哪怕是reset --hard这种看起来“毁灭性”的命令,我们可以通过reflog把你的工作找回来。跟着下面的步骤走:
第一步:用reflog定位丢失的提交
先在终端里运行这条命令:
git reflog
你会看到一串记录,每条都包含哈希值和操作说明——比如你之前执行的git reset --hard origin/branch-a和git reset --hard origin/master都会在这里留下痕迹。你要找的是在第一次reset之前的那个提交,也就是你之前用git commit生成的c570a27(或者对应的完整哈希,reflog里会显示)。
第二步:恢复到目标提交
找到那个提交的哈希值后,直接执行:
git reset --hard <找到的完整哈希值>
如果c570a27是有效的短哈希(Git能识别),也可以直接用它:
git reset --hard c570a27
执行完后,你的工作目录就会回到那个提交的状态了。
第三步:确认恢复并正确推送
现在用git log看看,你之前的55个文件变更是不是都回来了?如果没问题,这次要正确推送到branch-a分支:
git push origin branch-a
为啥之前看不到那个提交区间?
你提到的7da90b9..1da7015找不到,是因为你当时在branch-a分支执行git push origin master时,实际推的是本地master分支到远程master(Git的语法是git push <远程> <本地分支>,没指定的话默认匹配同名分支)。而你真正的工作提交在branch-a上,之后的两次reset --hard把本地branch-a回退到了远程的旧版本,导致你的提交变成了“无家可归”的孤儿提交——不在任何分支上,所以git log看不到,但reflog会追踪所有HEAD的变化,包括这些孤儿提交。
最后提个小建议:以后推送时,要是想把当前分支推到远程对应分支,直接用git push origin HEAD就不会搞错分支;如果要推到其他远程分支,明确写清楚git push origin <本地分支>:<远程分支>,比如git push origin branch-a:master才是把branch-a的内容推到远程master。
内容的提问来源于stack exchange,提问作者user3808307




