Git 撤销操作(结合VSCode)
Git 撤销操作(VSCode为例)
说明
在初始时,假设四个区域保持同步
- Disk 硬盘
- Staging 暂存区
- Local 本地Git
- Remote 远程Git
Disk 撤销文件修改
等价于 VSCode "放弃更改"
# VSCode
git checkout -q -- B1.java
# manual
git checkout B1.java
# manual - new version
git restore B1.java
Disk->Staging 暂存与撤销
-
Disk->Staging 添加暂存
# VSCode git add -A -- B1.java # manual git add B1.java
-
Staging移除, 保留Disk(撤销
git add
)# VSCode git reset -q HEAD -- B1.java # manual git reset B1.java # manual - new version git restore --staged B1.java
-
Staging移除,不保留Disk
# manual git checkout HEAD B1.java
Staging->Local 本地提交
git reset 可以退回到之前任意一个commit状态
HEAD~ 后可跟数字,表向上退回的版本通常作用于个人分支,如果想提交,使用
git push -f
强制接收修改
-
Staging->Local 添加提交
# manual git commit
-
Local 撤销Commit
回到Commit之前的状态,被撤销的变化保留在Staging
注意,commit message 也被清掉了!
# manual git reset --soft HEAD~1
同时撤销
git commit
和git add
当然,commit message 也会被清掉
# manual git reset HEAD~1 # manual 等价于 git reset --mixed HEAD~1
同时从 Local、Staging、Disk中移除,恢复到上一次提交的状态
危险操作,不推荐
# manual git reset --hard HEAD~1
git revert
本质是增加一个提交,后跟一个或多个参数可以理解为
-Change
,也就是提交一个改动,与上一次改动抵消
提交链 最后一次提交是 Change)
Init -> Change -> -Change
优势1:可以撤销 (Init , HEAD) 中间任意一个提交的操作
案例:
Init -> Change0 -> Change1 -> -Change0
取消 Change0的修改(最后一次提交是 Change1):
git revert HEAD~1
优势2:共有分支只能加不能回溯,只能使用
git revert
+git push
# manual git revert HEAD