主博客地址:
F嘉阳 博客blog.fjy8018.top掘金地址:
F嘉阳 的个人主页 - 掘金juejin.im分离头指针
当前分支图
![30bb74f734f8cc2b4ac6e6de2189f5be.png](https://i-blog.csdnimg.cn/blog_migrate/94d311e5700c699ccac45360257d2ef3.jpeg)
切换到之前的某一次提交
![04485da05b4cde81ca1f12e31d551362.png](https://i-blog.csdnimg.cn/blog_migrate/a983e83d671ecdbb9b1006b6aaf6a203.jpeg)
执行命令
$ git checkout de11fa87ea
提示,当前位于“分离头指针”状态
![25e64037802c25170839db86970d9ee0.png](https://i-blog.csdnimg.cn/blog_migrate/17a830db903230627980e189d3d5028c.jpeg)
分支图
![4d34e8f0277d4341deb9c37b86df361a.png](https://i-blog.csdnimg.cn/blog_migrate/dbc317036038b3d0956f272b0afa236f.jpeg)
注意
- 在分离头指针状态下没有绑定分支
- 产生的commit不会被保存
- 分支切换后在分支图中看不到该commit
- 一段时间后会被git自动清除
使用场景
- 尝试性做一些变更,可以随时丢弃
此处演示分离头指针丢失commit的情况和补救措施
丢失commit
使用IDE修改文件并提交,忽略所有警告,修改后分支图如下
![7ecaff876b68db12cca82002206250bd.png](https://i-blog.csdnimg.cn/blog_migrate/4834ee98b2f39d0f3cd8eb4123156f6d.jpeg)
此时接到其他需求,需要切换分支进行紧急修复
执行命令
$ git checkout master
分支切换成功,并弹出提示和告警
Warning: you are leaving 1 commit behind, not connected to any of your branches:
199ac20 游离状态修改文件
If you want to keep it by creating a new branch, this may be a good time to do so with:
git branch 199ac20
Switched to branch 'master' Your branch is up to date with 'origin/master'.
![d80f1f0b4b1c48b6e28fc38eb3b3b03f.png](https://i-blog.csdnimg.cn/blog_migrate/33b7e15073c1b330c2afba91aaa854e3.jpeg)
此时查看分支图,刚才的commit已经不可见
![1698f9b9cb89e62e7be22ac06323e030.png](https://i-blog.csdnimg.cn/blog_migrate/a9e45aff250a4c1c5669a4188bc98ecd.jpeg)
补救
此时发现刚才的commit十分重要,可根据git的提示进行补救
执行命令
$ git branch hot-fix 199ac20
再次查看分支图,可见commit已经恢复
![85a235fff16f2c16581e37d039fd736c.png](https://i-blog.csdnimg.cn/blog_migrate/b367ffff0b05eee890462d93d2fdd549.jpeg)
本地分支操作
以下操作仅适用于本地分支,无远程分支协同工作的情况
修改当前commit的message——amend
当前分支图
![5fa5d6d68fd625d4bb295beb915d9632.png](https://i-blog.csdnimg.cn/blog_migrate/77733659ba1dd445ed12eb3965fb858a.jpeg)
执行命令
$ git commit --amend
自动弹出编辑器
![cdba7dc615755ebd1d27df24c476c908.png](https://i-blog.csdnimg.cn/blog_migrate/bc6912e7b14dfcdbd90ec5640a53fe3d.jpeg)
修改后保存并关闭编辑器即可,输出如下
![a10696a484cc2bbbe4c41ab18da7f30f.png](https://i-blog.csdnimg.cn/blog_migrate/dace07f9e0b476c71cfa31bccc255dea.png)
再次查看分支图
![f05639fd5ac7f4d602380882f7b6c310.png](https://i-blog.csdnimg.cn/blog_migrate/6c687942ec60f49a9ff2059e65807850.jpeg)
修改前面某次commit的message——rebase
现计划修改如下message
![449f28851c963f759c157689bccbbbd0.png](https://i-blog.csdnimg.cn/blog_migrate/419875f30b1546acc09cffa5ad54ec1a.jpeg)
使用IDE拷贝其父提交的SHA值