git 重置(回退提交版本)and用reflog挽救錯誤重置

git 重置(回退提交版本)

查看.git文件中master文件內容
$ cat .git/refs/heads/master
0e662b107b1c08f515393151649689db317fa539
$ vi .git/refs/heads/master
  1 0e662b107b1c08f515393151649689db317fa539

查看歷史提交的管理關係

$ git log --graph --oneline

* 0e662b1 git 第七章begin
* 376db27 css
* fada18c 20171116-01學習查看headhia1
* e157c35 22
* 53e9a0d 測試縮寫
* 4461311 提交
* 5562173 初始
分支遊標

當前分支指向的是

  • 0e662b1 git 第七章begin
    執行下面代碼:
$ git reset --hard HEAD^
HEAD is now at 376db27 css
$ cat .git/refs/heads/master
376db27efde034a620699c3f01ac12133c7c2a81

master 文件中commitid變成上一次提交的 id,而且觀察項目修改的文件被還原。重置命令不止重置到前一次。還可以重置到任意一次歷史提交。
注意: 重置命令很危險。會徹底丟棄歷史修改。不能通過查看歷時id,再次使用重置命令恢復新修改的內容。(可以通過其他辦法恢復)

回退參數詳解

git rest –soft 只是改變版本頭指向,不改變暫存區和工作區。

git rest –mixed 更改指向,改變暫存區,不改變工作區。

git rest –hard 更改指向,該變暫存區,改變工作區。

用reflog挽救錯誤重置

如果沒有記錄下重置前master分支指向提交的id,想重置就要通過.git/logs目錄下日誌文件查看分支變更信息。默認非裸版本庫都提供分支日誌功能。

$ git config core.logallrefupdates
true

查看master分支日誌文件:

$ tail -5 .git/logs/refs/heads/master 
c97b18beff34fe27a2efc62c11cf777b0caae0e5 9b04b5e4db3d7c1b047828af89f7f28f9257434e wangchengwei <wang1100@vip.qq.com> 1511697648 +0800   commit (merge): 順序表結構
9b04b5e4db3d7c1b047828af89f7f28f9257434e 373358580958c9dd9d1b09877cd4d8b9de47424f wangchengwei <wang1100@vip.qq.com> 1511708562 +0800   commit: 鏈表
373358580958c9dd9d1b09877cd4d8b9de47424f 0bfd67bac8a3640bcc70041d7540644a1240cf3d wangchengwei <wang1100@vip.qq.com> 1511741360 +0800   commit: 重置test1
0bfd67bac8a3640bcc70041d7540644a1240cf3d ec4dc0fd08a71f57177b298c8347a97ff646f1a7 wangchengwei <wang1100@vip.qq.com> 1511741406 +0800   commit: 重置test2
ec4dc0fd08a71f57177b298c8347a97ff646f1a7 0bfd67bac8a3640bcc70041d7540644a1240cf3d wangchengwei <wang1100@vip.qq.com> 1511741440 +0800   reset: moving to HEAD^

可以看出來master分支指向變遷 git rest –hard 命令後指向的提交id變爲0bfd67bac8a3640bcc70041d7540644a1240cf3d

git reflog命令,對這個文件操作。使用show子命令可以顯示此文件內容。(正序排列)

$ git reflog show master | head -5
0bfd67b master@{0}: reset: moving to HEAD^
ec4dc0f master@{1}: commit: 重置test2
0bfd67b master@{2}: commit: 重置test1
3733585 master@{3}: commit: 鏈表
9b04b5e master@{4}: commit (merge): 順序表結構

重置master爲改變之前的值

$ git reset --hard ec4dc0f
HEAD is now at ec4dc0f 重置test2

查看log

git log --oneline

ec4dc0f 重置test2
0bfd67b 重置test1
3733585 鏈表
9b04b5e 順序表結構
發佈了42 篇原創文章 · 獲贊 2 · 訪問量 6458
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章