首页 > 技术文章 > git撤销修改

ericli-ericli 2017-12-21 19:41 原文

Git操作流程序列图及说明

当作者看到这幅图的时候,只有惊叹与佩服啊,这张图看着虽然简单,但是涵盖了git的基本原理与常用的操作。要说缺憾,就是缺少tag相关的描述。

简单来说,git对应的4个区:

  • 工作区(Working Area)
  • 暂存区(Stage)
  • 本地仓库(Local Repository)
  • 远程仓库(Remote Repository)

由此对应3个步骤(修改提交的步骤):

    git add .              --把所有文件放入暂存区;
    git commit -m "说明"    --把所有文件从暂存区提交进本地仓库;
    git push               --把所有文件从本地仓库推送进远程仓库。

另外,由以上4个区,进入每一个区成功之后会产生一个状态,再加上最初始的一个状态,一共是5种状态。以下我们把这5种状态分别命名为:

  • 未修改(Origin)
  • 已修改(Modified)
  • 已暂存(Staged)
  • 已提交(Committed)
  • 已推送(Pushed)

修改查看与对应撤销方式

1、工作区到缓存区之前

 git add . 之前,可以通过下述命令,查看“已修改,未暂存”的修改:
git diff
撤销修改:
git checkout .  
 git reset --hard

2、暂存区到本地仓储前

在提交到暂存区之后(执行  git commit -m "提交说明" 之前,git add . 之后),可以通过下述命令,查看“已暂存,未提交”的修改:
git diff --cached
撤销修改:
git reset
git checkout .
git reset --hard

3、本地到远程仓储前

在提交到暂存区之后(执行 git push original *** 之前  git commit -m "提交说明" 之后),可以通过下述命令,查看“已提交,未推送”的修改:
git diff master origin/master
撤销修改:
git reset --hard origin/master

4、已提交远程后

git push之后,
撤销修改:
    git reset --hard HEAD^ 
    git push -f
由于本地仓库远程仓库是等价的,只需要先恢复本地仓库,再强制push远程仓库。(只限于当前远程,仅自己这次提交,别人未跟着提交合并或已经pull了这次提交的代码)
保险起见:

使用 git revert 回滚代码,但是这个操作有个副作用:只要碰到merge就会需要人工判断。



参考自:https://www.fengerzh.com/git-reset/

推荐阅读