push的時候發(fā)現(xiàn)明明是該在main分支上,卻不在,導(dǎo)致無法push到origin main
git branch結(jié)果:
- (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 恢復(fù)代碼。
# 查看提交歷史,找到之前的 HEAD 位置
git reflog
# 假設(shè) HEAD 回到之前的第一個提交,使用 git reset 恢復(fù)代碼
git reset --hard HEAD@{1}
b. 如果您之前沒有執(zhí)行過提交,可以使用 git stash 命令暫存您的更改,然后再切換回 main 分支。
# 暫存當(dāng)前的更改
git stash
# 切換回 main 分支
git checkout main
# 如果需要,可以還原之前的更改
git stash apply
我的解決過程
我是執(zhí)行過提交的,所以走以下步驟:
-
首先,通過
git log/git reflog命令查看提交歷史,找到之前消失的提交。git log
commit aa4ce2236448478d25ebe393da977d66a05ee584 (HEAD)git reflog
aa4ce22 HEAD@{1}: commit:這里是commit備注得到了歷史該提交的哈希值aa4ce22
使用
git reset --hard aa4ce22命令將 HEAD 指針移動到該提交,恢復(fù)之前的代碼狀態(tài)。確認(rèn)代碼恢復(fù)成功后,使用
git push origin main命令將本地的 main 分支推送到遠(yuǎn)程倉庫,使遠(yuǎn)程倉庫的 main 分支與本地同步。
事故原因
為什么我明明在main分支,會跑到HEAD呢
在 Git 中,當(dāng)您使用 git checkout 命令切換到一個特定的提交時,而不是切換到一個分支名稱,就會進入“游離狀態(tài)”(detached HEAD)。這時,HEAD 不再指向任何分支,而是直接指向一個具體的提交
所以可能是久久沒上班,重新熟悉git命令時跑了一個空git checkout
ToT