(9) Git 練功坊-取消修改
取消修改
在 git 裡主要用兩種方法來取消修改,一種是 git reset,另外一種是 git revert。
git reset
git reset 利用把分支的參考點退回到上一個 commit 來取消修改。你可以認為這是在”重寫歷史”。git reset 往回移動 branch,原來的 branch 所指向的 commit 好像從來沒有存在過一樣。
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值,是可以回復的。
但如果有遠端備份(github)的話,不建議用git reset ,因為如果你將本機reset過的紀錄再push一次到遠端,你的同事又從本地端push一次到遠端,那你想reset不要的紀錄又回到遠端了。
git revert
為了將你想取消的紀錄分享給你的同事,可以用git revert,概念是再做一個新的 Commit,來取消你不要的 Commit,新的commit點上會有 ‘ 代表是revert 的點。
1 | git revert + 要刪除的commit點 |