git revert
和 git reset
都用于撤銷 Git 中的提交,但它們的作用和使用場景不同:
-
git revert
:- 作用:創建一個新的提交,撤銷指定的提交內容。
- 使用場景:用于“回滾”已推送到遠程倉庫的提交。這種方法不會改變提交歷史,只是添加一個新的提交,反向操作指定的提交內容。
- 示例:如果你想撤銷最后一次提交,但保留歷史記錄,可以用:
這將創建一個新的提交,該提交撤銷git revert HEAD
HEAD
指向的那個提交。
-
git reset
:- 作用:重置當前分支的指針到指定的提交,可以選擇是否修改工作區和暫存區的內容。
- 使用場景:用于本地回退到某個提交,常用于撤銷未推送到遠程倉庫的提交。
git reset
會改變歷史記錄,可能會導致丟失數據,尤其是如果使用了--hard
選項時。 - 示例:
git reset --soft <commit>
:只移動分支指針,不更改工作區和暫存區。適用于想要撤銷提交,但保留修改的場景。git reset --mixed <commit>
:移動分支指針并重置暫存區,不更改工作區。適用于希望撤銷提交并重新暫存的場景。git reset --hard <commit>
:徹底重置,包括工作區和暫存區的更改。適用于完全撤銷某個提交的場景,但要小心,因為數據會丟失。
總結
git revert
適用于已推送的提交,它會創建一個新提交來撤銷某個提交的效果,適合多人協作。git reset
適用于本地操作,它可以改變提交歷史,并且有多種方式控制是否影響工作區,適合在推送之前進行修改。
你通常會選擇 revert
來保持歷史不變,而選擇 reset
來徹底修改提交歷史(僅限本地操作)。