Git rebase后提交历史被抹掉了,怎么恢复?

FSD-闪闪 阅读 125

今天在合并分支时用了git rebase main,解决冲突后提交了,结果发现之前的提交历史全没了,只剩最后那次合并的记录。我明明记得要保留分支历史才用的rebase,现在该怎么把中间的几个提交找回来?

尝试过git reflog看到有之前的commit记录,比如:

82d3a1f (HEAD, feature/login) Merge branch 'main' into feature/login  
9f8c7d2 Save credentials logic  
a1b2c3d Add login form

但不知道该用哪个哈希值恢复中间步骤,直接checkout会创建新分支吗?

页面上有个登录表单突然样式错乱了,可能是冲突解决时删了CSS:

<form>  
  <input type="text" placeholder="Username">  
  <!-- 密码输入框好像被删了? -->  
  <button>Login</button>  
</form>

这下代码和提交历史都乱了,该怎么补救?

我来解答 赞 16 收藏
二维码
手机扫码查看
2 条解答
慕容东宁
你这情况其实是 rebase 时把中间提交“压扁”了,但 reflog 里还能看到旧的 commit,直接用 git rebase --continue 前的 HEAD 回滚就行。
git reset --hard 9f8c7d2 回到你 Save credentials logic 那个提交,再 git checkout -b recover-feature 新建个分支,然后用 git cherry-pick a1b2c3d 把 Add login form 那个提交捡回来,再比对下 CSS 文件有没有丢。
我之前这么搞过好几次,能救回来,别慌。
点赞 3
2026-02-24 09:19
Mc.士轩
Mc.士轩 Lv1
git reflog 找到你要恢复的提交哈希,比如 a1b2c3d,然后执行 git reset --hard a1b2c3d 恢复到那个状态。如果想保留当前改动,先 git stash 一下再恢复。样式错乱的话,对比下 git diff a1b2c3d 看看哪块CSS丢了,我之前就这样搞的。

# 示例代码
git reflog
git reset --hard a1b2c3d
git diff a1b2c3d
点赞 15
2026-01-30 09:02