push的时候发现明明是该在main分支上,却不在,导致无法push到origin main
git branch
结果:
- (no branch, rebasing main)
- main
此时我顺手就 git checkout main
于是我的代码们就消失了...
错误码
! [rejected] main -> main (non-fast-forward)
error: failed to push some refs to 'git@github.com:XXXXXX.git'```
搜索解决答案:
a. 使用 git reflog
查看提交历史,找到之前的 HEAD
位置,然后使用 git reset
恢复代码。
# 查看提交历史,找到之前的 HEAD 位置
git reflog
# 假设 HEAD 回到之前的第一个提交,使用 git reset 恢复代码
git reset --hard HEAD@{1}
b. 如果您之前没有执行过提交,可以使用 git stash
命令暂存您的更改,然后再切换回 main
分支。
# 暂存当前的更改
git stash
# 切换回 main 分支
git checkout main
# 如果需要,可以还原之前的更改
git stash apply
我的解决过程
我是执行过提交的,所以走以下步骤:
-
首先,通过
git log
/git reflog
命令查看提交历史,找到之前消失的提交。git log
commit aa4ce2236448478d25ebe393da977d66a05ee584 (HEAD)
git reflog
aa4ce22 HEAD@{1}: commit:这里是commit备注
得到了历史该提交的哈希值aa4ce22
使用
git reset --hard aa4ce22
命令将 HEAD 指针移动到该提交,恢复之前的代码状态。确认代码恢复成功后,使用
git push origin main
命令将本地的 main 分支推送到远程仓库,使远程仓库的 main 分支与本地同步。
事故原因
为什么我明明在main分支,会跑到HEAD呢
在 Git 中,当您使用 git checkout
命令切换到一个特定的提交时,而不是切换到一个分支名称,就会进入“游离状态”(detached HEAD)。这时,HEAD 不再指向任何分支,而是直接指向一个具体的提交
所以可能是久久没上班,重新熟悉git命令时跑了一个空git checkout
ToT