[ Git ] 不同場景下如何使用「撤銷」操作

YEUNGCHIE發表於2024-12-08

https://www.cnblogs.com/yeungchie/

本地的改動

Changes not staged for commit

git checkout $file

或者:

git restore $file  # 推薦

已經被暫存的改動

Changes to be committed

  1. 取消暫存,將改動恢復到本地 Changes not staged 的狀態。
git reset $file

或者:

get restore --staged $file  # 推薦
  1. 撤銷改動,恢復到 last commit 的狀態,改動會丟失。
git checkout HEAD $file  # `HEAD` 表示 last commit

已經被提交的改動

Your branch is ahead of 'remote/main' by 1 commit.

  1. 將改動恢復到本地編輯狀態。
git reset HEAD~1
git reset --mixed HEAD^  # 等效

這裡就是重置到倒數第二次 commit 的狀態,並恢復到這次改動還未 add 的狀態。
HEAD^ 代表 HEAD 的上一次 commit,就是倒數第二次 commit,也可以用使用 HEAD~1 來表示。

  1. 將改動恢復到暫存狀態。
git reset --soft HEAD^
  1. 將這次改動刪除,本地也不會保留。
git reset --hard HEAD^
  1. 將這次 commit 的修改回退並作為新的改動。
git revert HEAD

revert 之後會新增一次 commit,檔案內容會恢復到「本次」改動未進行的狀態。

已經被推送的改動

  1. 本地使用 revert 進行回退。
git push
  1. 本地使用 reset 進行回退。
git push -f  # force

對於公共倉庫或者多人協作的倉庫,因該謹慎使用 force push 功能。

相關文章