我用sourcetree提交后,能看到我提交的代码,然后通过拉取代码,导致commit记录消失。在终端使用git log也没有刚刚提交的commit记录。
解决办法:
使用git reflog可以看到提交记录,复制commit id,然后使用git cherry-pick id 的方式可以把代码再拉回来,再push就ok了;
原因:
git HEAD detached出现问题.记录消失
如何从git HEAD detached中恢复
1.Git Checkout 操作概念
git checkout 实际上是修改HEAD文件的内容,让其指向不同的branch。
HEAD文件指向的branch就是当前branch.
查看.git下的文件HEAD
ref: refs/heads/feature/20170629_996359_init_1
和执行 branch -a的地址是一样的,可见HEAD文件确实指定了了当前branch。
* feature/20170629_996359_init_1
master
2.为什么会出现detached Head
git checkout最简单的用法,显示工作区,暂存区和HEAD的差异;
$git checkout
Your branch is up-to-date with 'origin/feature/20170629_996359_init_1'.
但是有时候使用git checkout的时候会出现'ou are in 'detached HEAD' state.'的提示,原因是什么呢?
如果让HEAD文件指向一个commit id,那就变成了detached HEAD。采用如下步骤可以复现该效果
- git log 查看版本好
- git checkout 某一个版本号,可以看到如下结果
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:
git checkout -b <new-branch-name>
HEAD is now at d3c3a8a... update
如何退出detached Head
git checkout 本地分支即可退出detached状态。
在实际应用出现这个情况一般是check origin的时候,这个时候可能会出现一些错误操作,比如不停的checkout orgin,pull等操作。
参考博客:
https://www.jianshu.com/p/2e3367f1d3b3