Git教程——回到從前 (reset)

1.工作前先查看日誌

$ git log --oneline

在這裏插入圖片描述

2.修改已 commit 的版本

有時候我們總會忘了什麼, 比如已經提交了 commit 卻發現在這個 commit 中忘了附上另一個文件. 接下來我們模擬這種情況. 上節內容中, 我們最後一個 commit 是 change 2, 我們將要添加另外一個文件, 將這個修改也 commit 進 change 2. 所以我們複製 1.py 這個文件, 改名爲 2.py. 並把 2.py 變成 staged, 然後使用 --amend 將這次改變合併到之前的 change 2 中.

$ git add 2.py
$ git commit --amend --no-edit   # "--no-edit": 不編輯, 直接合併到上一個 commit
$ git log --oneline    # "--oneline": 每個 commit 內容顯示在一行

# 輸出
904e1ba change 2    # 合併過的 change 2
c6762a1 change 1
13be9a7 create 1.py

在這裏插入圖片描述

3.reset 回到 add 之前

有時我們添加 add 了修改, 但是又後悔, 並想補充一些內容再 add. 這時, 我們有一種方式可以回到 add 之前. 比如在 1.py 文件中添加這一行:

d = 3

文件從修改(modified)狀態到staged狀態

$ git add 1.py
$ git status -s # "-s": status 的縮寫模式
# 輸出
M  1.py     # staged

在這裏插入圖片描述
接下來我們想回到modified狀態執行以下語句:

$ git reset 1.py
# 輸出
Unstaged changes after reset:
M	1.py
-----------------------
$ git status -s
# 輸出
 M 1.py     # unstaged

在這裏插入圖片描述

4.reset 回到 commit 之前

每個 commit 都有自己的 id 數字號, HEAD 是一個指針, 指引當前的狀態是在哪個 commit. 最近的一次 commit 在最右邊, 我們如果要回到過去, 就是讓 HEAD 回到過去並 reset 此時的 HEAD 到過去的位置.
在這裏插入圖片描述

# 不管我們之前有沒有做了一些 add 工作, 這一步讓我們回到 上一次的 commit
$ git reset --hard HEAD    
# 輸出
HEAD is now at 7338690 change 2
-----------------------
# 看看所有的log
$ git log --oneline
# 輸出
7338690 (HEAD -> master) change 2
49f05cc change 1
4e6aee2 create 1.py

在這裏插入圖片描述

# 回到 49f05cc change 1
# 方式1: "HEAD^"
$ git reset --hard HEAD^  

# 方式2: "commit id"
$ git reset --hard 49f05cc
-----------------------
# 看看現在的 log
$ git log --oneline
# 輸出
49f05cc (HEAD -> master) change 1
4e6aee2 create 1.py

在這裏插入圖片描述
怎麼 change 2 消失了!!! 還有辦法挽救消失的 change 2 嗎? 我們可以查看 $ git reflog 裏面最近做的所有 HEAD 的改動, 並選擇想要挽救的 commit id:

$ git reflog
# 輸出
49f05cc (HEAD -> master) HEAD@{0}: reset: moving to HEAD^
7338690 HEAD@{1}: reset: moving to HEAD
7338690 HEAD@{2}: commit (amend): change 2
c911905 HEAD@{3}: commit: change 2
49f05cc (HEAD -> master) HEAD@{4}: commit: change 1
4e6aee2 HEAD@{5}: commit (initial): create 1.py

在這裏插入圖片描述
重複 reset 步驟就能回到 commit (amend): change 2 (id=904e1ba)這一步了

$ git reset --hard 7338690
#輸出
HEAD is now at 7338690 change 2
$ git log --oneline
#輸出
7338690 (HEAD -> master) change 2
49f05cc change 1
4e6aee2 create 1.py

在這裏插入圖片描述
我們又再次奇蹟般的回到了 change 2.

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