[ Git ] 不同场景下如何使用「撤销」操作
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 功能。