https://www.cnblogs.com/yeungchie/
本地的改動
Changes not staged for commit
git checkout $file
或者:
git restore $file # 推薦
已經被暫存的改動
Changes to be committed
- 取消暫存,將改動恢復到本地
Changes not staged
的狀態。
git reset $file
或者:
get restore --staged $file # 推薦
- 撤銷改動,恢復到 last commit 的狀態,改動會丟失。
git checkout HEAD $file # `HEAD` 表示 last commit
已經被提交的改動
Your branch is ahead of 'remote/main' by 1 commit.
- 將改動恢復到本地編輯狀態。
git reset HEAD~1
git reset --mixed HEAD^ # 等效
這裡就是重置到倒數第二次 commit 的狀態,並恢復到這次改動還未
add
的狀態。
HEAD^
代表HEAD
的上一次 commit,就是倒數第二次 commit,也可以用使用HEAD~1
來表示。
- 將改動恢復到暫存狀態。
git reset --soft HEAD^
- 將這次改動刪除,本地也不會保留。
git reset --hard HEAD^
- 將這次 commit 的修改回退並作為新的改動。
git revert HEAD
revert 之後會新增一次 commit,檔案內容會恢復到「本次」改動未進行的狀態。
已經被推送的改動
- 本地使用 revert 進行回退。
git push
- 本地使用 reset 進行回退。
git push -f # force
對於公共倉庫或者多人協作的倉庫,因該謹慎使用 force push 功能。