GitHub 未提交到仓库数据 status 提示红HEAD detached

HEAD detached at

理解为分支是通过一个head的指针来指向的
git checkout 实际上是修改HEAD文件的内容,让其指向不同的branch。
HEAD文件指向的branch就是当前branch.

通过git branch命令看到的结果和HEAD文件内容一致。
[plain] view plain copy
$ git branch -v
* master 1aea8d9 [ahead 1] add test file x

2.最简单用法
git checkout最简单的用法,显示工作区,暂存区和HEAD的差异:
[plain] view plain copy
$ git checkout
M x
Your branch is ahead of ‘origin/master’ by 1 commit.
意思是我本地仓库比远程仓库领先一个提交操作。git checkout HEAD 功能相同。
如果用-a 参数,可以看到很多branch,包括远程的branch,比如:

[plain] view plain copy
git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/develop
remotes/origin/issue_193
remotes/origin/issue_210
remotes/origin/master

3.detached HEAD
如果让HEAD文件指向一个commit id,那就变成了detached HEAD。git checkout 可以达到这个效果,用下面的命令:
[plain] view plain copy
git checkout 1aea8d9^
laea8d9是最近的一次commit id,^指的是之前一次,因此上面的操作结果是让HEAD文件包含了倒数第二次提交的id.

下面演示如何进入datached HEAD状态,并恢复回来。

git branch -v  
master 89f8dae [ahead 2] update x  
git checkout 89f8dae^  
checking out '89f8dae^'.  

现在恢复回来

 git checkout master  
Previous HEAD position was 1aea8d9... add test file x  
Switched to branch 'master'  
Your branch is ahead of 'origin/master' by 2 commits.  

我并不清楚detached HEAD有何实际用处,反正就是一个让HEAD随便指向某个commit id,而不在乎是哪个branch的功能。

总结一下:
1. git status

查看自己是不是在head状态下

2. git branch -v

查看到底有几个分支,确认自己在哪个状态太

3. git checkout master

在主分支情况下进行提交,然后也可以继续进行切换到你想要进入的子分支,git checkout 自分支名 然后再进行提交。

保留新的数据的提交

再走一下模拟的流程

git branch -v
获取分支版本号

git checkout 3a801ee
进入对应的分支

git status
查看确认一下HEAD是在3a801ee

然后就是正常的编辑开发流程了
1.首先打开文件
2.对文件进行编辑保存
3.add
4.commit
5.push到对应的分支仓库newTestBranch
6.Everything up-to-date提示数据已经更新
然后我们发现newTestBranch数据仓库中没有更新的数据,尼玛,傻眼了吧。。。。

重磅好消息,下面就是这种同时保留之前数据合并的方法哦

  1. git branch -v 查看后没有你需要的分支(newTestBranch)有的话可以省略2
  2. git fetch origin newTestBranch:newTestBranch(newTestBranch 前面的分支为远程分支名,后面是本地分支名)
    然后git branch -v 查看分支
    确认能自己新建的newDevelop分支的存在

  3. git reflog show HEAD@{now} -10
    这个命令会把HEAD指针所有的动作显示出来。从中可以清楚的看到,在指针中提交对应的commit id
    找到需要恢复的commit ,记下前面的commit id

  4. git branch temp efa64f5
    新建一个名字叫temp的分支,用这个分支代替之前的临时分支并且拥有想要恢复的commit,现在切换到temp下会发现一切都回来了
    但是还是不能推送啊。原因是temp是我们本地的分支,远程库中并没有这个分支。

  5. git checkout develop
    切换到从远程库拉取到的develop分支

  6. git merge temp
    将temp分支合并到develop分支上,有冲突就解决冲突。

  7. git push origin develop
    OK,推送到远程库。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值