Git指南 - 刚提的commit 怎么找不到了(游离分支)?

在有一次使用git时,我提交commit后,并未push,然后直接切到了当前分支的某个tag,最后我想切回来的时候,竟然找不到我刚才提交commit的节点了…

关联篇

小步阑珊,应好过固步不前

问题场景

具体有以下几步:

  1. 本地提交 commit 未 push
  2. 切换tag 或 分支
  3. 最后无法找到之前的commit节点,导致切不回最新的代码

解决方式

这种解决方式在我看来属于曲线救国,如果以后有更好的,我应该会再来补充

步骤1:通过 git reflog 查看当前分支的所有提交记录(惯性思维可能会直接用git log ,并不适用于当前场景)

在这里插入图片描述

步骤2:找到 commit 记录,基本就解决了一半问题; 接下来,新建分支,回滚代码

  • 上图 标红区域为 操作 git 后的 hash ,都是唯一的(我们需要切换到哪个节点,就需要用到对应节点的hash值)
  • 新建一条临时分支,用于存储最新节点最新代码

新建临时分支(一般会直接切换新建的分支)

 git checkout -b "tmpLiu"

就在临时分支中 git reset --hard 最新commit hash值

 git reset --hard e795...

步骤3:切换回之前的分支,合并临时分支(合并完成后,可删除临时分支)

切换分支

git checkout 之前分支

合并分支

git merge tmpLiu

Hint:下方的游离分支同该处的解决方式基本相同,只是多了一些示例,有不懂的话也可以去看看

最终解决

在这里插入图片描述


游离分支

在解决问题中 和 解决问题之后,我才发现原来这种操作涉及到游离分支的一些相关知识;
head指针处于游离状态,需要建立一个分支然后将它合并到master分支,最后删除那个临时分支即可。

别人遇到的场景同我稍有不同,是在提交代码时 git push xxx xxx 报错,但是解决方式相同,具体如下

git push origin dev ,报错:error: src refspec dev does not match any

在这里插入图片描述

从图中可以看出当前在 HEAD detached from origin/dev 分支下,此为游离分支,是匿名的

解决方式

  1. 查看在游离状态下提交的 最新commit号:执行 git reflog 命令或者执行 git branch -v 命令,两者其一即可
  • git reflog
  • git branch -v

可以看到最新commit号是:8708fbb(如果自我感觉 git branch -v 显示不全的话,可以直接用 git reflog

在这里插入图片描述

  1. 创建一个临时的分支,创建完成之后切换到该分支上查看一下
git branch temp 最新的commit号
//示例:  git branch temp 8708fbb 
  1. 切换到要合并的分支上
git checkout 要合并临时分支的分支名称
//示例: git checkout dev
  1. 合并分支
git merge temp
  1. 删除临时分支
git branch -d temp
  1. 推送合并后的分支到远程仓库
git push origin 分支名称:远程分支名称
//示例: git push origin dev
  1. 最后就不放图了,你可以在当前分支,直接通过 log 查看最终结果

猜你喜欢

转载自blog.csdn.net/qq_20451879/article/details/130771265
今日推荐