Rick's DevNotes
筆記關於我作品集
筆記類別
  • 全部
  • DockerDocker
  • NetworkNetwork
  • RxJSRxJS
  • NginxNginx
  • TypeScriptTypeScript
  • Data_Structure_And_AlgorithmData Structure And Algorithm
  • JavaScriptJavaScript
  • PostgreSQLPostgreSQL
  • ReactReact
  • GitGit

© 2026 Rick's DevNotes. All rights reserved.

# Git

建立時間:2021/04/11

Git 筆記:Restore、Revert 與 Reset

Git Restore

由於 git checkout 具備許多的功能, Git 為了不讓使用者產生混淆,推出了 git restore 指令,讓使用者避免特意去記 git checkout blah blah blah 的複雜指令。

還原已改變的內容

與 git checkout HEAD < filename > 效果相同,將某個以修改的文件還原至最後一次 commit 的模樣。

將文件還原至某個 commit 時期的模樣

git restore < file-name > 的指令是將 HEAD 作為還原的起點,若想要將文件還原至特定的 commit 時期,可以在 restore 後方加入 --source 選項,並在選項後方加入要還原的位置 ( commit-hash 或是 HEAD~# )。

將暫存區 (Staging Area) 的文件還原

如果某個文件內容已進行修改並存檔,甚至還透過 git add 將它加入暫存區內,若想將它還原至上一次 commit 的模樣,可以輸入 git restore --staged < file-name > 。


Git Reset

撤銷 commit & 保留修改的內容

若想撤銷前幾次的 commits ,但又不希望內容消失,可以使用 git reset < commit-hash > ,此時 repository 會回到特定 commit ,"在其之後的 commits 都會消失,但內容仍會保留"。

撤銷 commit & 不保留修改的內容

若不想保留修改內容,可以在 git reset 後方加入 --hard 選項。


Git Revert

git revert 功能與 git reset --hard 類似,都可以進行達到撤銷 commit 內容的功能,但在"歷史紀錄上"不一樣, git reset 實際上是將 HEAD 往前移動到特定位置,並刪除其後面的 commits ,而 git revert 則是仍會保留該 commit ,並在其後新增一個新的 commit 來撤銷另一個 commit 的內容,因此該 revert 指令後會跳出訊息要求加入新的 commit 。

reset 與 revert 的 history 差異:

目前的 commit 歷史紀錄:

情境: 若使用 git reset --hard de42dc7 之後:


情境: 若使用 git revert de42dc7 之後:

Revert 使用時機

雖然 git reset 以及 git revert 都可將做到還原的功能,但如果是在進行多人共同開發的專案時,使用reset會影響到其他開發同仁的 history ,但 revert 的好處在於,可以達到與 reset 一樣的效果,因為是額外新增一個新的 commit 而非撤銷它。

參考資料

  • The Git & Github Bootcamp