主博客地址:
F嘉阳 博客blog.fjy8018.top掘金地址:
F嘉阳 的个人主页 - 掘金juejin.im分离头指针
当前分支图
![ee542b6f510f8412f1bd93a0ef286bad.png](https://i-blog.csdnimg.cn/blog_migrate/3bdcb479df90203d36ecea54e2d37636.jpeg)
切换到之前的某一次提交
![6396c6fba6ad6ea5f69ed41a6498d6bb.png](https://i-blog.csdnimg.cn/blog_migrate/1c799dace006e373abb8a81c721e43a8.jpeg)
执行命令
$ git checkout de11fa87ea
提示,当前位于“分离头指针”状态
![1939f4de8c63fd7ecce1626058dbfa76.png](https://i-blog.csdnimg.cn/blog_migrate/ca8e961a7fd276e56fa9889498514518.jpeg)
分支图
![cd80216dc8d96e0a6150afd204c8419a.png](https://i-blog.csdnimg.cn/blog_migrate/e3cbd868ca0b5e3993fd3a013499c146.jpeg)
注意
- 在分离头指针状态下没有绑定分支
- 产生的commit不会被保存
- 分支切换后在分支图中看不到该commit
- 一段时间后会被git自动清除
使用场景
- 尝试性做一些变更,可以随时丢弃
此处演示分离头指针丢失commit的情况和补救措施
丢失commit
使用IDE修改文件并提交,忽略所有警告,修改后分支图如下
![8a2dcc2cc4197e3575e3b6cd36ab5848.png](https://i-blog.csdnimg.cn/blog_migrate/e554f5245ca6fc188c4283fa782aa71f.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'.
![1fcc8756c9c0699845e4082657e6e5f3.png](https://i-blog.csdnimg.cn/blog_migrate/9857b7e18a9a160fbbc8229462183f2f.jpeg)
此时查看分支图,刚才的commit已经不可见
![3a78ac4c35e23fb514a6ec145f3d5742.png](https://i-blog.csdnimg.cn/blog_migrate/ad01cf89ed58b7632b0e94c91352d8cc.jpeg)
补救
此时发现刚才的commit十分重要,可根据git的提示进行补救
执行命令
$ git branch hot-fix 199ac20
再次查看分支图,可见commit已经恢复
![ed29508fbb10e3780ac0eb0aadb2408a.png](https://i-blog.csdnimg.cn/blog_migrate/1f30dba56586728fa6f2ee52501da2b3.jpeg)
本地分支操作
以下操作仅适用于本地分支,无远程分支协同工作的情况
修改当前commit的message——amend
当前分支图
![9454d437e00d15c7fddccd83ca01aa53.png](https://i-blog.csdnimg.cn/blog_migrate/6a38983fceec0ce9bbb46720f767bfbc.jpeg)
执行命令
$ git commit --amend
自动弹出编辑器
![a5cbe11d34c52c2f3b3a55ab8e70a9ae.png](https://i-blog.csdnimg.cn/blog_migrate/66c84cd67f37b8ee6b02484fc5b45605.jpeg)
修改后保存并关闭编辑器即可,输出如下
![3c83a1fbc837dd575a9e4924067238ee.png](https://i-blog.csdnimg.cn/blog_migrate/9e3d584838b95e56ac4ebce2610e584e.png)
再次查看分支图
![7cd2574a2b032db46255822b1d4f4275.png](https://i-blog.csdnimg.cn/blog_migrate/e2e5409c26da983808df98785ef01ed5.jpeg)
修改前面某次commit的message——rebase
现计划修改如下message
![093aad3d58920389979c47b4b7897478.png](https://i-blog.csdnimg.cn/blog_migrate/1ef6635f0bbd2617e68fa79f1dc579f7.jpeg)
使用IDE拷贝其父提交的SHA值