Git筆記 Going back & Undoing Changes


觀念

只是看看 : checkout
從尚未commit的編輯文件退回到某個commit : restore
從現在commit倒退回某commit 資料會留在檔案 也會留在staging : reset
從現在commit倒退回某commit 資料會留在檔案 但不留在staging : reset --hard
想在undo某些commit的時候,從那一點開始修改不會影響到其他branch: revert

(1)git checkout

檢視某段過去的commit、file、branch ,僅檢視而沒有undo
一般來說Head都是指向最新的commit

checkout的功能就是能讓我們檢視過去那些舊的commit

我們可以用git log找到commit的hash value
git checkout [commit hash] 就可以回去檢視commit

然而這時候想要更改資料是不行的 因為Head並不是真正為commit pointer
-->再Head上面新增branch再更改

(2) git restore
當我們在已經commit的文件中編輯,且新的編輯尚未commit
想要回到文件某個commit時就可以用restore倒退回去
git restore filename --> 倒退到Head在的commit
!!倒退回去後不能再undo,因為剛剛的編輯沒有commit (把restore想成究極ctrl+z)
git restore --source HEAD~N file.txt -->倒退到Head往後N的commit

git restore --staged filename 可以將staging裡面的file移除

(3) git reset ###
當我們想將commit後的檔案結果跳回過去某個commit,就可以使用
git reset ### 會退回到###的狀態,跟reset當下之間的改變會留在staging階段
git reset ### --hard 會回到###的狀態,跟reset當下之間的改變不會保留

(4) git revert
會在原本branch上建立一個新的commit,這個commit代表是undo某些commit
那這功能不能用原本的reset操作嗎?


如果reset的話繼續操作下去會影響到brand other的歷史紀錄


revert某點表示為某點undo且在本branch新增的commit point
如此一來從revert的這點開始修改也不會影響到其他branch

練習

checkout

在空白folder新增file.txt:
first commit
add/commit "first commit"

接下來file.txt:
first commit
second commit (新增)
add/commit "second commit"

third commit跟上述一樣
git log --oneline

Head目前在third commit現在我們想要查看second commit

那要回去third commit怎麼辦

restore

首先在原本file.txt裡面亂改一通,之後使用git restore file.txt
就變回third commit狀態

若要變回first commit狀態則git restore --source HEAD~2 file.txt
此時用git log --oneline --> Head仍是third commit

從staging移除

現在創立兩個新檔案 file2.txt file3.txt並且加入staging, 之後移除file2.txt

reset

一如剛剛先建立file.txt的三個commit:
file.txt:
commit 1
commit 2
commit 3

接下來我們想要reset到commit 2 git reset ###of_commit2
--> commit 2 ~ commit 3之間的變動會留在staging中

文件部分commit3的變動在staging中

接下來修改file.txt:
commit 1
commit 2
update (modify)
add , commit "update"

現在強制reset到commit 2 git reset ### --hard

revert

一如剛剛先建立file.txt的三個commit:
file.txt:
commit 1
commit 2
commit 3


file.txt:
commit 1
commit 2

revert commit3 從commit3長出一個新的commit point就不會影響到別的branch








你可能感興趣的文章

[ 筆記 ] 後端基礎 - 資料庫、SQL 語法

[ 筆記 ] 後端基礎 - 資料庫、SQL 語法

【THM Walkthrough】Enumerating Active Directory

【THM Walkthrough】Enumerating Active Directory

筆記、[JS102] 升級你的 JavaScript 技能:ES6 + npm + Jest

筆記、[JS102] 升級你的 JavaScript 技能:ES6 + npm + Jest






留言討論