有時候我們總會忘了什麼, 比如已經提交了commit
卻發現在這個commit
中忘了附上另乙個檔案. 接下來我們模擬這種情況. 上節內容中, 我們最後乙個commit
是change 2
, 我們將要新增另外乙個檔案, 將這個修改也commit
進change 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
然後add
去staged
再返回到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...