萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 作業系統 >  >> Linux 教學

Git 撤銷操作完全指南:從修改提交訊息到重寫歷史

Git 的強大在於「幾乎任何操作都能撤銷」。本文針對六大常見情境——公開提交回滾、修正訊息、丟棄未暫存修改、重置本地提交、誤重置後復原、分支錯誤修正——提供最佳實務指令與原理解析,並附贈 reflog 救命技與互動式 rebase 大量整理技巧。

情境一:撤銷已公開的提交(安全、不改歷史)

git revert <SHA>
  • 產生新提交,內容與指定提交完全相反(刪除變新增、新增變刪除)。
  • 不改寫歷史,可直接 git push,適合共享分支。

情境二:修正最後一個提交訊息(未推送)

git commit --amend -m "Fixes bug #42"
  • 若工作目錄無新修改,僅改寫訊息;若有修改,會一併納入新提交。
  • 會改變提交 SHA,**僅限未推送的本地提交**使用。

情境三:丟棄工作目錄的未暫存修改

git checkout -- <filename>
# 或 Git 2.23+
git restore <filename>
  • 將檔案還原至 HEAD 狀態,**修改內容永久消失**,操作前請先 git diff 確認。

情境四:重置本地提交(未推送)

# 保留修改在工作目錄(軟重置)
git reset <last-good-SHA>

# 連同修改一起丟棄(硬重置,慎用)
git reset --hard <last-good-SHA>
  • 將 HEAD 指回指定提交,後續提交從歷史消失。
  • --hard 會清空暫存區與工作目錄修改,資料無法透過 Git 復原。

情境五:誤用 reset --hard 後想復原

git reflog
# 找到誤刪前的 SHA,例如 a1b2c3d

# 完整恢復歷史與工作目錄
git reset --hard a1b2c3d

# 或只恢復特定檔案
git checkout a1b2c3d -- path/to/file

# 或挑選單一提交重新套用
git cherry-pick a1b2c3d

reflog 關鍵特性:

  • 記錄 HEAD 變動(commit、reset、checkout 分支等),不記錄未提交的檔案修改。
  • 本地專屬,無法恢復他人未推送的提交。
  • 預設保留 90 天(可配置 gc.reflogExpire)。

情境六:提交到錯誤分支(應在 feature 分支卻在 master)

# 1. 在當前位置建立 feature 分支(指向最新提交)
git branch feature

# 2. 將 master 硬重置回遠端狀態
git reset --hard origin/master

# 3. 切換到 feature 繼續工作
git checkout feature

此法保留提交歷史於 feature 分支,master 保持乾淨。

進階:rebase 整理提交歷史

將 feature 分支基底更新至最新 master

git checkout feature
git rebase master
  • 找共同祖先 → 暫存 feature 提交 → 接上 master 尾端 → 重放提交。
  • 歷史變線性,避免合併提交產生菱形圖。

互動式 rebase 大量整理(刪除/合併/重排/修改訊息)

git rebase -i <earlier-SHA>

編輯器開啟列表,每行開頭關鍵字:

  • pick:保留
  • drop:刪除
  • squash / fixup:合併至上一提交(fixup 捨棄訊息)
  • reword:修改訊息
  • edit:暫停修改內容

存檔離開後依序處理衝突或編輯訊息,完成後歷史即重寫完畢。

總結速查表

情境指令是否改歷史適用階段
公開提交回滾git revert <SHA>否已推送
修正最後訊息git commit --amend是未推送
丟棄未暫存修改git checkout -- <file>否隨時
重置本地提交git reset [--hard] <SHA>是未推送
誤重置復原git reflog + reset/checkout/cherry-pick視操作本地
分支錯誤修正git branch feature; git reset --hard origin/master; git checkout feature是未推送
整理提交歷史git rebase -i <SHA>是未推送

Git 撤銷操作示意

reflog 示意

互動式 rebase 編輯器

熟練這些撤銷技巧,就能在 Git 世界裡大膽實驗、快速試錯,不再害怕「手滑」。

copyright © 萬盛學電腦網 all rights reserved