回到從前 reset

2021-10-04 04:39:13 字數 3404 閱讀 5521

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

$ git add 2.py

$ git log --oneline # "--oneline": 每個 commit 內容顯示在一行

# 輸出

904e1ba change 2 # 合併過的 change 2

c6762a1 change 1

13be9a7 create 1.py

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

d = 3
然後addstaged再返回到add之前:

$ git add 1.py

$ git status -s # "-s": status 的縮寫模式

# 輸出

m 1.py # staged

-----------------------

$ git reset 1.py

# 輸出

unstaged changes after reset:

m 1.py

-----------------------

$ git status -s

# 輸出

m 1.py # unstaged

在穿梭到過去的commit之前, 我們必須了解git是如何一步一步累加更改的. 我們擷取網上的一些 

每個commit都有自己的id數字號,head是乙個指標, 指引當前的狀態是在哪個commit. 最近的一次commit在最右邊, 我們如果要回到過去, 就是讓head回到過去並reset此時的head到過去的位置.

# 不管我們之前有沒有做了一些 add 工作, 這一步讓我們回到 上一次的 commit

$ git reset --hard head

# 輸出

head is now at 904e1ba change 2

-----------------------

# 看看所有的log

$ git log --oneline

# 輸出

904e1ba change 2

c6762a1 change 1

13be9a7 create 1.py

-----------------------

# 回到 c6762a1 change 1

# 方式1: "head^"

$ git reset --hard head^

# 方式2: "commit id"

$ git reset --hard c6762a1

-----------------------

# 看看現在的 log

$ git log --oneline

# 輸出

c6762a1 change 1

13be9a7 create 1.py

怎麼change 2消失了!!! 還有辦法挽救消失的change 2嗎? 我們可以檢視$ git reflog裡面最近做的所有head的改動, 並選擇想要挽救的commit id:

$ git reflog

# 輸出

c6762a1 head@: reset: moving to c6762a1

904e1ba head@: commit (amend): change 2

0107760 head@: commit: change 2

c6762a1 head@: commit: change 1

13be9a7 head@: commit (initial): create 1.py

重複reset步驟就能回到commit (amend): change 2(id=904e1ba)這一步了:

$ git reset --hard 904e1ba

$ git log --oneline

# 輸出

904e1ba change 2

c6762a1 change 1

13be9a7 create 1.py

Git系列4 回到從前 reset

有時候我們總會忘了什麼,比如已經提交了commit卻發現在這個commit中忘了附上另乙個檔案.接下來我們模擬這種情況.上節內容中,我們最後乙個commit是change 2,我們將要新增另外乙個檔案,將這個修改也commit進change 2.所以我們複製1.py這個檔案,改名為2.py.並把2....

能回到從前麼

年過了,坐了24個多小時的火車,來到了廣州,現在的我住在華農的好朋友那裡,此刻坐在乙個實驗室裡,很安靜。愛情被我挽救回來了,但是回頭看看這短短十餘天發生的事情,會讓人生出種後怕的感覺,如果專注在這個問題上,都會不由的收緊,這感覺我想每個人都有經歷過。不少人說我在這年頭辭職不明智,但是我並沒有想那麼多...

回到從前 checkout 針對單個檔案

這節例子的初始檔案 其實checkout最主要的用途並不是讓單個檔案回到過去,我們之後會繼續講checkout在分支branch中的應用,這一節主要講checkout讓檔案回到過去 gittut 1.py 2.py我們僅僅要對1.py進行回到過去操作,回到c6762a1 change 1這乙個com...