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

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 功能。

posted @ 2024-12-08 18:14  YEUNGCHIE  阅读(51)  评论(0编辑  收藏  举报