git的撤销与回滚在平时使用中还是比较多的,比如说我们想将某个修改后的文件撤销到上一个版本,或者是想撤销某次多余的提交,都要用到git的撤销和回滚操作。撤销分两种情况,一个是commit之前,一个是commit之后,下面具体看下这两种情况。

一.git commit之前

未添加到暂存区的撤销(没有git add)

添加进暂存区的撤销(git add后)

$ git status
On branch test_git
Changes not staged for commit: 没有添加到暂存区
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)

    modified: new_src/app/Http/Controllers/Frontend/KyHome/KyHomeUnitTrait.php
    modified: new_src/app/Http/Controllers/Frontend/KyHome/KyHomeWordFilterTrait.php


可以通过

 git checkout -- filename来撤销修改
git checkout -- new_src/app/Http/Controllers/Frontend/KyHome/KyHomeWordFilterTrait.php

再次查看文件状态发现选择的文件已经成功被撤销了。

$ git status
On branch test_git
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
    modified: new_src/app/Http/Controllers/Frontend/KyHome/KyHomeUnitTrait.php
    

如果想将多个文件一次性撤销可以用

 git checkout -- .

上面是 未添加到暂存区的撤销

下面是添加到暂存区的

$ git status
On branch test_git
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory) modified: new_src/app/Http/Controllers/Frontend/KyHome/KyHomeApp.php
modified: new_src/app/Http/Controllers/Frontend/KyHome/KyHomeComment.php
$ git add -A
$ git status
On branch test_git
Changes to be committed: 已经添加暂存区了
(use "git reset HEAD <file>..." to unstage) modified: new_src/app/Http/Controllers/Frontend/KyHome/KyHomeApp.php
modified: new_src/app/Http/Controllers/Frontend/KyHome/KyHomeComment.php

从暂存区撤销

$ git reset HEAD new_src/app/Http/Controllers/Frontend/KyHome/KyHomeApp.php
Unstaged changes after reset:
M new_src/app/Http/Controllers/Frontend/KyHome/KyHomeApp.php

如果想一次性将所有暂存区文件撤销回来,还是上面的命令,不过不用加文件路径。

$ git reset HEAD
Unstaged changes after reset: M new_src/app/Http/Controllers/Frontend/KyHome/KyHomeApp.php
M new_src/app/Http/Controllers/Frontend/KyHome/KyHomeComment.php

二.git commit之后

如果当commit提交后想撤销的话,这就需要revert命令。git revert 命令是撤销某次操作,而在此次操作之前和之后的提交记录都会保留。

先修改了几个文件然后commit 再用git log查看提交记录。

commit 2842c8065322085c31fb7b8207b6296047c4ea3
Author: songguojun <songgj@kingnet.sh>
Date: Sat Apr :: + add content

然后使用revert  后面跟上git提交的commitid

git  revert 2842c8065322085c31fb7b8207b6296047c4ea3
Revert "add content"

This reverts commit 2842c8065ffe2085c31fb7b8207b6296047c4ea3.

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch test_git
# Changes to be committed:
# modified: new_src/app/Http/Controllers/Frontend/KyHome/KyHomeApp.php
# modified: new_src/app/Http/Controllers/Frontend/KyHome/KyHomeComment.php

然后在推送到远端更新远程仓库代码,修改的文件就撤销回来了。注意的是revert奇数次生效,偶数次又回到之前的修改状态。比如一个文件内容是a,那么修改为ab,revert后文件变成了a,如果在revert后文件又还原成ab了。

还有就是如果想回到之前某个版本,可以用reset命令,可以回退到某次提交,那该提交之后的提交都会回滚,不过这种覆盖是不可逆的,之前的提交记录都没有了。所以平时开发中尽量注意,避免使用reset。

用法:

git  reset --hard  commit_id
  • --hard – 强制将缓存区和工作目录都同步到你指定的提交
 git  reset --hard fdeb212a5418cc8e31f32d63cf197550297468ec
HEAD is now at fdeb212 增加mysql端口配置

然后在提交到远端覆盖。

【git】git撤销与回滚的更多相关文章

  1. Git的撤销与回滚

    1,commit 之前的撤销 未添加至暂存区的撤销(add 之前) git status git checkout . 已添加至暂存区的撤销(add 之后,有或者没有commit操作都可以执行) gi ...

  2. git的几种回滚 git revert 和 git reset的区别

    git的几种回滚 git revert 和 git reset的区别:强烈建议:对HEAD不熟的话最好不要用HEAD,直接用commitID吧,我遇到的问题:reset HEAD~1之后,可能是别人提 ...

  3. git远程代码库回滚(webstorm下)

    git远程代码库回滚(webstorm下) 1. 场景 添加了一个文件[file-for-test.js]到git的控制下 进行了三次修改,并分别进行了三次commit,最后进行了一次push git ...

  4. git第八节---git 撤销和回滚

    # git 撤销 1. 未添加进暂存区的撤销  --未git add 2.添加进暂存区的撤销--  已git add 未git commit 未添加进暂存区的撤销命令:git checkout -- ...

  5. Git撤销&amp;回滚操作

    开发过程中.你肯定会遇到这种场景: 场景一: 糟了.我刚把不想要的代码.commit到本地仓库中了.可是还没有做push操作! 场景二: 彻底完了.刚线上更新的代码出现故障了.须要还原这次提交的代码! ...

  6. Git撤销、回滚操作

    git的工作流 工作区:即自己当前分支所修改的代码,git add xx 之前的!不包括 git add xx 和 git commit xxx 之后的. 暂存区:已经 git add xxx 进去, ...

  7. Git reset head revert 回滚

    Overview 涉及Git一些日常操作 :) 基础知识 <Pro Git>至少了解branch,commit的概念,及基本的原理 Git常用魔法 存档:master代码回滚方法 我是QA ...

  8. [转]Git 代码撤销、回滚到任意版本(当误提代码到本地或master分支时)

    两种情况(场景) 情况一      代码还只在本地,未push到运程仓库,想把代码还原到上一次commit的代码,此时操作为代码撤销 解决方案: 1 git reset [--hard|soft|mi ...

  9. Git 代码撤销、回滚到任意版本(当误提代码到本地或master分支时)

    转自https://www.cnblogs.com/lwh-note/p/9639835.html 两种情况(场景) 情况一      代码还只在本地,未push到运程仓库,想把代码还原到上一次com ...

随机推荐

  1. 四、Object.defineProperty总结

    Object.defineProperty() 参考:https://segmentfault.com/a/1190000007434923 定义: 方法会直接在一个对象上定义一个新属性,或者修改一个 ...

  2. react中如何使用动画效果

    在react中想要加入动画效果 需要引入 import {CSSTransitionGroup} from 'react-transition-group' //加入react 动画包 import ...

  3. Window.scrollTo()

    摘要 滚动到文档中的某个坐标. 语法 window.scrollTo(x-coord,y-coord ) window.scrollTo(options) 参数 x-coord 是文档中的横轴坐标. ...

  4. Oracle 表空间的创建与管理

    Oracle数据库创建之后有一些默认的表空间随之被创建,查询数据字典 dba_data_files 可以得到数据库当前的所有表空间信息. select * from v$tablespace; sel ...

  5. Python基础知识2-内置数据结构(上)

     分类 数值型 用浮点型的时候注意别和"=="一起使用. 数字的处理函数 注意round()函数的特殊:四舍六入五取偶 类型判断 列表list 列表list定义 初始化 列表索引访 ...

  6. QTP 自动化测试--点滴 等待

    1 使用wait()语句:wait(10) 等待10秒后继续执行 Window("驷惠WIN系列[汽车4S连锁管理软件] 6.").Window("应付帐款明细查询&qu ...

  7. commons-lang

    今天在编码的过程中,对于null,采用==null进行判断.并且为了过滤"",使用了str.trim().length()==0,当str为null时,报空指针异常. 于是决定使用 ...

  8. Oracle 查询两个时间段内的所有日期列表

    1.查询某时间段内日期列表 select level,to_char(to_date('2013-12-31','yyyy-mm-dd')+level-1,'yyyy-mm-dd') as date_ ...

  9. FastJson、Jackson、Gson进行Java对象转换Json细节处理

    前言 Java对象在转json的时候,如果对象里面有属性值为null的话,那么在json序列化的时候要不要序列出来呢?对比以下json转换方式 一.fastJson 1.fastJson在转换java ...

  10. C 语言-----字符串和输入输出函数

    在C语言中,没有字符串类型,那它是怎么表示字符串呢? 由于字符串是一系列单个字符的组合,所以它用char 类型的数组来表示字符串,在数组中,一个数组元素存放一个char类型字符. ]; name 变量 ...