美文网首页
git无法push,! [rejected]main -> ma

git无法push,! [rejected]main -> ma

作者: 叶猜 | 来源:发表于2023-07-19 14:34 被阅读0次

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

相关文章

网友评论

      本文标题:git无法push,! [rejected]main -> ma

      本文链接:https://www.haomeiwen.com/subject/hwgoudtx.html