在使用 Git 的過程中,有時候我們會需要取消最近的一個或多個 commit。這篇文章將詳細介紹如何進行這個操作,並提供實際使用情境和範例。

方法一:使用 git reset

使用情境:本地開發,尚未推送到遠端

1. Soft Reset(軟重置)

說明

使用 git reset --soft 會保留工作目錄和索引(暫存區)的狀態,只是將 HEAD 指針移動到前一個 commit。

命令
git reset --soft HEAD~1
範例

假設你剛剛 commit 了一個包含錯誤的文件 buggy_file.txt

echo "This is a mistake" > buggy_file.txt
git add buggy_file.txt
git commit -m "Add buggy file"

你可以使用 git reset --soft HEAD~1 來取消這個 commit,但保留文件更改。

2. Hard Reset(硬重置)

說明

使用 git reset --hard 會丟棄最後一個 commit 中的所有更改,包括工作目錄和索引。

命令
git reset --hard HEAD~1
範例

如果你確定要完全丟棄最後一個 commit 的所有更改,包括 buggy_file.txt,你可以使用 git reset --hard HEAD~1

方法二:使用 git revert

使用情境:已經推送到遠端的 commit

說明

如果你已經將 commit 推送到遠端,使用 git reset 是不安全的。這時,你可以使用 git revert

命令

git revert HEAD

範例

假設你已經將包含 buggy_file.txt 的 commit 推送到遠端。

git push origin main

你可以使用 git revert HEAD 來創建一個新的 commit,用於撤銷最後一個 commit 的更改。

注意事項

  • 在使用 git reset 前,確保沒有其他人已經拉取(pull)你想要取消的 commit。
  • 使用 git revert 會保留一個撤銷更改的歷史記錄。
最後修改日期: 2023 年 9 月 22 日

作者