You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

提交已推送但仓库无显示,丢失4天工作请求技术协助

找回你丢失的Git提交

别慌!Git其实偷偷记录了所有你对仓库做的操作,哪怕是reset --hard这种看起来“毁灭性”的命令,我们可以通过reflog把你的工作找回来。跟着下面的步骤走:

第一步:用reflog定位丢失的提交

先在终端里运行这条命令:

git reflog

你会看到一串记录,每条都包含哈希值和操作说明——比如你之前执行的git reset --hard origin/branch-agit 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

火山引擎 最新活动