(9) Git 練功坊-取消修改

取消修改

在 git 裡主要用兩種方法來取消修改,一種是 git reset,另外一種是 git revert。

git reset

git reset 利用把分支的參考點退回到上一個 commit 來取消修改。你可以認為這是在”重寫歷史”。git reset 往回移動 branch,原來的 branch 所指向的 commit 好像從來沒有存在過一樣。

reset
reset

git reset 可以分為 –hard、 –soft 、 –mixed 三種模式

reset –mixed

1
git reset --mixed HEAD~1   # 數字表示移動到 HEAD後面第幾個

–mixed 是預設的參數,如果沒有特別加參數,git reset 指令將會使用 –mixed 模式。這個模式會把暫存區的檔案丟掉,但不會動到工作目錄的檔案,也就是說 Commit 拆出來的檔案會留在工作目錄,但不會留在暫存區。

reset –soft

這個模式下的 reset,工作目錄跟暫存區的檔案都不會被丟掉,所以看起來就只有 HEAD 的移動而已。也因此,Commit 拆出來的檔案會直接放在暫存區。

reset –hard

hard模式下,不管是工作目錄以及暫存區的檔案都會丟掉。

取消reset

如果你reset完後悔,輸入 git checkout + reset點的hash值,是可以回復的。

hash
checkout

但如果有遠端備份(github)的話,不建議用git reset ,因為如果你將本機reset過的紀錄再push一次到遠端,你的同事又從本地端push一次到遠端,那你想reset不要的紀錄又回到遠端了。

git revert

為了將你想取消的紀錄分享給你的同事,可以用git revert,概念是再做一個新的 Commit,來取消你不要的 Commit,新的commit點上會有 ‘ 代表是revert 的點。

1
git revert + 要刪除的commit點

新增C2' 來取消C2