git reset [commit ID] 和 git reset --hard [commit ID] 差別
PS: 如果不知道跳到哪裡了,請善用reflog
http://ithelp.ithome.com.tw/articles/10138150
狀況 1: 今天有5個commits,心血來潮想回去第3個commit
-- 確認工作目錄 git status 都乾淨
使用git reset [third commit ID] 或 git reset --hard [third commit ID]
結果:都順利回去第3個commit,沒有其他訊息。
狀況2.1:承上,在第3個commit裡面做檔案新增/修改,也沒git commit,再回去最新的commit
git reset [newest commit ID] :剛剛的檔案被保留並屬於unstaged狀態*(未放在索引)
有git commit也一樣會被改成unstaged
git reset --hard [newest commit ID]:剛剛的檔案會被忽略(刪掉),強迫回到最新commit狀態
狀況2.2:反過來,在最新的commit做檔案新增/修改(沒commit),跳回第3個commit
git reset [third commit ID]:檔案會被帶進來屬於unstaged狀態;就算有commit也一樣會被變成unstaged狀態保留下來。
狀況3: 在第3個commit建立新分支,沒做任何動作就跳到第2個commit或回最新的commit
兩種指令結果: 分支自動被延伸到所跳到的commit
=>這種特性可以救回被刪掉的分支,如狀況4說明
狀況4: 在最新的commit刪掉分支 git branch -d(or -D) [被刪分支],後悔了想救回來
使用兩種 git reset 指令回到[被刪分支]存在的commit,這樣就救回來了。
狀況5:不知道跳到哪個commit了,想直接跳到最新的commit
=> 善用git reflog 找紀錄....它很強大,Git預設紀錄至少30天,刪除reflog也無法全刪,只能一筆一筆刪,刪了不會影響commit。
PS: 如果不知道跳到哪裡了,請善用reflog
http://ithelp.ithome.com.tw/articles/10138150
狀況 1: 今天有5個commits,心血來潮想回去第3個commit
-- 確認工作目錄 git status 都乾淨
使用git reset [third commit ID] 或 git reset --hard [third commit ID]
結果:都順利回去第3個commit,沒有其他訊息。
狀況2.1:承上,在第3個commit裡面做檔案新增/修改,也沒git commit,再回去最新的commit
git reset [newest commit ID] :剛剛的檔案被保留並屬於unstaged狀態*(未放在索引)
有git commit也一樣會被改成unstaged
git reset --hard [newest commit ID]:剛剛的檔案會被忽略(刪掉),強迫回到最新commit狀態
狀況2.2:反過來,在最新的commit做檔案新增/修改(沒commit),跳回第3個commit
git reset [third commit ID]:檔案會被帶進來屬於unstaged狀態;就算有commit也一樣會被變成unstaged狀態保留下來。
狀況3: 在第3個commit建立新分支,沒做任何動作就跳到第2個commit或回最新的commit
兩種指令結果: 分支自動被延伸到所跳到的commit
=>這種特性可以救回被刪掉的分支,如狀況4說明
狀況4: 在最新的commit刪掉分支 git branch -d(or -D) [被刪分支],後悔了想救回來
使用兩種 git reset 指令回到[被刪分支]存在的commit,這樣就救回來了。
狀況5:不知道跳到哪個commit了,想直接跳到最新的commit
=> 善用git reflog 找紀錄....它很強大,Git預設紀錄至少30天,刪除reflog也無法全刪,只能一筆一筆刪,刪了不會影響commit。
沒有留言:
張貼留言