Git commit後提交記錄消失不見

我用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。採用如下步驟可以復現該效果

  1. git log 查看版本好
  2. 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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章