push的時候發(fā)現(xiàn)明明是該在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. 如果您之前沒有執(zhí)行過提交样傍,可以使用 git stash
命令暫存您的更改,然后再切換回 main
分支铺遂。
# 暫存當前的更改
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 指針移動到該提交,恢復之前的代碼狀態(tài)粮坞。確認代碼恢復成功后蚊荣,使用
git push origin main
命令將本地的 main 分支推送到遠程倉庫,使遠程倉庫的 main 分支與本地同步莫杈。
事故原因
為什么我明明在main分支,會跑到HEAD呢
在 Git 中互例,當您使用 git checkout
命令切換到一個特定的提交時,而不是切換到一個分支名稱筝闹,就會進入“游離狀態(tài)”(detached HEAD)媳叨。這時,HEAD 不再指向任何分支关顷,而是直接指向一個具體的提交
所以可能是久久沒上班,重新熟悉git命令時跑了一個空git checkout
ToT