Git 撤销操作(结合VSCode)

Git 撤销操作(VSCode为例)

说明

在初始时,假设四个区域保持同步

  • Disk 硬盘
  • Staging 暂存区
  • Local 本地Git
  • Remote 远程Git

Disk 撤销文件修改

等价于 VSCode "放弃更改"

image-20221015135607388

# VSCode
git checkout -q -- B1.java
# manual
git checkout B1.java
# manual - new version
git restore B1.java

Disk->Staging 暂存与撤销

  1. Disk->Staging 添加暂存

    # VSCode
    git add -A -- B1.java
    # manual
    git add B1.java
    
  2. Staging移除, 保留Disk(撤销 git add)

    image-20221015140227580

    # VSCode
    git reset -q HEAD -- B1.java
    # manual
    git reset B1.java
    # manual - new version
    git restore --staged B1.java
    
  3. Staging移除,不保留Disk

    # manual
    git checkout HEAD B1.java
    

Staging->Local 本地提交

git reset 可以退回到之前任意一个commit状态
HEAD~ 后可跟数字,表向上退回的版本

通常作用于个人分支,如果想提交,使用git push -f 强制接收修改

  1. Staging->Local 添加提交

    # manual
    git commit
    
  2. Local 撤销Commit

    回到Commit之前的状态,被撤销的变化保留在Staging

    注意,commit message 也被清掉了!

    # manual
    git reset --soft HEAD~1
    

    同时撤销 git commitgit 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
    
posted @ 2022-10-15 14:49  jentreywang  阅读(222)  评论(0编辑  收藏  举报