Git 撤销操作

image.png

1 撤销本地硬盘上的修改 (Disk)

场景:仅在硬盘上修改,未提交至暂存区。
需求:撤销硬盘上的修改。

1
2
git checkout <changed_file>
git restore <changed_file>

2 撤销暂存区中的修改 (Staging)

场景:修改已 git add 提交至暂存区。
需求:将修改文件从暂存区移出,且保留硬盘修改。

1
2
git reset <changed_file>
git restore --staged <changed_file>

场景:修改已 git add 提交至暂存区。
需求:撤销所有修改,将修改文件从暂存区移出,不保留硬盘修改。

1
git checkout HEAD <changed_file>

3 撤销本地存储库的修改 (Local)

场景:暂存区修改已 git commit 提交至本地存储库。
需求:撤销本地存储库的 commit, 文件修改保留在暂存区与硬盘。

1
git reset --soft HEAD~1

场景:暂存区修改已 git commit 提交至本地存储库。
需求:同时撤销 git commitgit add。仅在硬盘上保留修改,撤销本地存储库的 commit,不提交至暂存区。

1
2
git reset HEAD~1
git reset --mixed HEAD~1

场景:暂存区修改已 git commit 提交至本地存储库。
需求:撤销本地存储库的 commit, 将修改文件从暂存区移出,不保留硬盘修改。

1
git reset --hard HEAD~1

场景:暂存区修改已 git commit 提交至本地存储库。
需求:新增一个 commit, 将需要撤销的 commit 所修改内容反向改回。
特点是可以 revert 任意一个 commit 且不影响后续已提交的 commit。

1
git revert HEAD

4 撤销远程存储库的修改 (Remote)

场景:本地存储库的修改已 git push 至远程存储库。
需求:将远程存储库恢复至某 commit 之前。

首先判断影响分支是公有分支还是个人分支。
公有分支:只能使用 revert,只能增加不能减少。

1
2
git revert HEAD
git push

个人分支:可在本地 reset 后强制 push.

1
2
git reset --hard HEAD~1
git push -f

Licensed under CC BY-NC-SA 4.0
最后更新于 2024-05-30 00:04+08:00