文章目錄
- Git Reset 命令詳解與實用示例
- `git reset` 主要選項
- `git reset` 示例
- 1. 撤銷最近一次提交(但保留更改)
- 2. 撤銷最近一次提交,并清除暫存區
- 3. 徹底撤銷提交,并丟棄所有更改
- 4. 回退到特定的提交
- 5. 取消暫存的文件
- `git reset` 與 `git revert` 的區別
- 總結
Git Reset 命令詳解與實用示例
git reset
是一個強大的 Git 命令,主要用于撤銷提交(commit)、修改暫存區(staging area)或工作區(working directory)。它可以讓你回到某個特定的提交,或者只撤銷最近的更改,而不影響歷史記錄。
git reset
主要選項
--soft
:只回退提交(commit),保留暫存區和工作區的更改。--mixed
(默認):回退提交,并且清空暫存區(staging area),但保留工作區的更改。--hard
:回退提交,同時清空暫存區和工作區的所有更改。
git reset
示例
1. 撤銷最近一次提交(但保留更改)
git reset --soft HEAD~1
HEAD~1
表示回退到上一個提交。- 僅撤銷
commit
,但文件的修改仍保留在暫存區(staging area)。 - 適用于:想修改最后一次提交但不想丟失已暫存的內容。
2. 撤銷最近一次提交,并清除暫存區
git reset --mixed HEAD~1
- 僅撤銷
commit
,同時將暫存區的更改退回到工作區(但不刪除更改)。 - 適用于:提交了代碼但不想保留這個提交,而是繼續修改。
3. 徹底撤銷提交,并丟棄所有更改
git reset --hard HEAD~1
- 該命令會將代碼回退到上一個提交,并刪除所有未提交的更改(無法恢復)。
- 適用于:不想保留本地的修改,需要完全回到上一個提交的狀態。
4. 回退到特定的提交
git reset --hard <commit-hash>
<commit-hash>
是目標提交的哈希值(git log
可以查看)。- 適用于:回到某個特定版本,并清除之后的所有更改。
5. 取消暫存的文件
git reset HEAD <file>
- 取消對
<file>
的暫存,但保留其更改。 - 適用于:錯誤地使用
git add
暫存了文件,需要取消暫存但不丟失更改。
git reset
與 git revert
的區別
git reset
會直接修改歷史記錄,適合本地修改,不適用于已推送的提交。git revert
通過創建新的提交來撤銷某個提交,適用于共享倉庫。
示例:
git revert <commit-hash>
- 這不會改變提交歷史,而是生成一個新的撤銷提交,適合多人協作。
總結
命令 | 作用 | 影響 |
---|---|---|
git reset --soft HEAD~1 | 撤銷最近一次提交 | 保留暫存區和工作區的更改 |
git reset --mixed HEAD~1 | 撤銷最近一次提交,清除暫存區 | 保留工作區的更改 |
git reset --hard HEAD~1 | 撤銷最近一次提交,并清除所有更改 | 丟失所有未提交的更改 |
git reset HEAD <file> | 取消暫存區的文件 | 保留工作區的更改 |
git revert <commit-hash> | 撤銷某次提交,并生成新的提交 | 不修改提交歷史,適合共享倉庫 |
如果你對歷史回退有顧慮,建議使用 git revert
,而 git reset --hard
要謹慎使用,以免丟失重要代碼。