git無法push,! [rejected]main -> main (non-fast-forward),切換到main分支后代碼消失解決記錄

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容