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

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

关联篇

  • Git指南 - 你该掌握的那些基础认知和首次配置
  • Git指南 - 项目实战中天天用的那些基础命令
  • Git指南 - 通过规范使用Git来证明你是一个牛牛
  • Git指南 - 我经常遇到的那些项目实战场景
  • Git项目实战 - 我遇到的那些Git问题是这么解决的
  • Git指南 - 刚提的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

在这里插入图片描述文章来源地址https://uudwc.com/A/a2ebz

  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 查看最终结果

原文地址:https://blog.csdn.net/qq_20451879/article/details/130771265

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请联系站长进行投诉反馈,一经查实,立即删除!

上一篇 2023年07月02日 06:43
下一篇 2023年07月02日 06:44