下面以现实场景作为情境。

基础知识,理解git中的几个区域

本地代码已经add,未commit

修改本地工作目录中的readme.md,添加文字"第一次修改"

然后查看下状态

  1. experimentation git:(master) git status
  2. On branch master
  3. Your branch is up-to-date with 'origin/master'.
  4. Changes not staged for commit:
  5. (use "git add <file>..." to update what will be committed)
  6. (use "git checkout -- <file>..." to discard changes in working directory)
  7. modified: README.md
  8. no changes added to commit (use "git add" and/or "git commit -a")

进行Add操作,并查看状态

  1. experimentation git:(master) git add README.md
  2. experimentation git:(master) git status
  3. On branch master
  4. Your branch is up-to-date with 'origin/master'.
  5. Changes to be committed:
  6. (use "git reset HEAD <file>..." to unstage)
  7. modified: README.md
  8. experimentation git:(master)

这时候,变动进入了缓存区(Index)

但是我们突然发现我们改动错了,其实我是想改动experimentation.txt文件。

方法一:我们当然可以再次修改experimentation和readme文件(删除readme中的修改,给experimentation中添加“第一次修改”),然后再Add

方法二:我们想的可能是撤回之前的add操作,然后给experimentation中添加“第一次修改”,然后再次Add,那这样的话,我们如何操作呢?

  • 撤销某个add文件:git reset HEAD <filename>

  • 撤销全部add文件:git reset HEAD .

  1. experimentation git:(master) git reset HEAD README.md
  2. Unstaged changes after reset:
  3. M README.md
  4. experimentation git:(master) git status
  5. On branch master
  6. Your branch is up-to-date with 'origin/master'.
  7. Changes not staged for commit:
  8. (use "git add <file>..." to update what will be committed)
  9. (use "git checkout -- <file>..." to discard changes in working directory)
  10. modified: README.md
  11. no changes added to commit (use "git add" and/or "git commit -a")
Tip
git log与git reflog的区别

git reflog 可以查看所有分支的所有操作记录(包括commit,reset的操作,已经被删除的commit记录)

git log不能察看已经删除的commit记录

本地代码已经add,已commit


将本地代码多commit几次,再来看下我们的提交log

  • 方法一(推荐):执行git revert <commitId>

撤回到指定的版本,包括文件和状态。

  • 方法二:执行git reset <commitId>
  1. experimentation git:(master) git reset 2a6c701
  2. Unstaged changes after reset:
  3. M experimentation.txt
  4. experimentation git:(master) git status
  5. On branch master
  6. Your branch and 'origin/master' have diverged,
  7. and have 4 and 6 different commits each, respectively.
  8. (use "git pull" to merge the remote branch into yours)
  9. Changes not staged for commit:
  10. (use "git add <file>..." to update what will be committed)
  11. (use "git checkout -- <file>..." to discard changes in working directory)
  12. modified: experimentation.txt
  13. no changes added to commit (use "git add" and/or "git commit -a")

回退至指定的版本,区别如下

Tip
git revert与git reset的区别

git reset是直接删除指定的commit之前的所有commit(这是不安全的,特别是push后),把HEAD向后移动。

git revert是一次新的commit,HEAD继续前进,与普通的commit一样。

大话git中的撤销操作的更多相关文章

  1. 『现学现忘』Git基础 — 23、Git中的撤销操作

    目录 1.撤销操作说明 2.撤销工作区中文件的修改 3.撤销暂存区中文件的修改 4.总结 1.撤销操作说明 我们在使用Git版本管理时,往往需要撤销某些操作.比如说我们想将某个修改后的文件撤销到上一个 ...

  2. 在Git中如何撤销上一次的commit

    有的时候我们一不小心就git commit -m ‘commit message info’解决办法,很简单,只需执行git reset HEAD~这条命令即可,即能保证你原本的修改还在,也能撤销本次 ...

  3. git中的文件操作

    现在我们的机器上有了一个 真实项目 的 Git 仓库,并从这个仓库中检出了所有文件的 工作副本. 通常,你会对这些文件做些修改,每当完成了一个阶段的目标,想要将记录下它时,就将它提交到仓库. git中 ...

  4. Git 中的回退操作:reset 和 revert

    Git 中回退有 reset 和 revert,这两个的区别就是是否保留更改记录 假设当前的提交情况是:A <- B <- C <- D <- HEAD,如下图: 当前是 D, ...

  5. git中通过实际操作来了解常用命令

    基本的6个命令 常用的就下面6个命令,但是详细的可能有上百个命令. 还需要特别了解git的几个名词,workspace:工作区,Index/Stage:暂存区,Respository:本地仓库,Rem ...

  6. git 常用的撤销操作

    git 开发时的使用流程,从同事那里学习的, 第一步,先建立一个新的分支,可以在GITLAB或通过命令git checkout -b newbranch 或通过IDE插件 第二步,让项目切换到该分支, ...

  7. git中如何撤销部分修改?

    以提问中修改了两个文件a.b为例,假设需要撤销文件a的修改,则修改后的两个文件: 1.如果没有被git add到索引区 git checkout a 便可撤销对文件a的修改 2.如果被git add到 ...

  8. 如何在Git中撤销一切 | 干货

    翻译:李伟 审校:张帆 译自:Github JF杰微刊:如何在Git中撤销一切 任何一个版本控制系统中,最有用的特性之一莫过于 "撤销(undo)"操作.在Git中,"撤 ...

  9. Git 撤销操作、删除文件和恢复文件

    大致介绍 经过前面的学习,已经建立了版本库,并上传了文件,这次来学习对这些文件进行基本的操作,即: ◆ 撤销操作 ◆ 删除文件 ◆ 恢复文件 我在此之前,已经将三个文件提交到了版本库 撤销操作 撤销操 ...

随机推荐

  1. 51nod 1451 合法三角形 判斜率去重,时间复杂度O(n^2)

    题目: 这题我WA了3次,那3次是用向量求角度去重算的,不知道错在哪了,不得不换思路. 第4次用斜率去重一次就过了. 注意:n定义成long long,不然求C(3,n)时会溢出. 代码: #incl ...

  2. uvalive 3029 City Game

    https://vjudge.net/problem/UVALive-3029 题意: 给出一个只含有F和R字母的矩阵,求出全部为F的面积最大的矩阵并且输出它的面积乘以3. 思路: 求面积最大的子矩阵 ...

  3. Java历程-初学篇 Day04选择结构(1)

    一,if 1,单分支 if(条件){ } 示例: 2,双分支 if(条件){ }else{ } 示例: 3,多重if if(条件){ }else if(条件){ }else{ } 示例: 4,嵌套if ...

  4. 坑中速记整理! 使用 kotlin 写第一个 ReactNative Android 模块

    Kotlin 和 Swift, 两大新宠! 借 ReactNative 熟悉下 kotlin 的用法,不料掉坑里面了.昨晚花了大半夜,趁这会儿思路清晰,把涉及到的一些关键信息,迅速整理下. 最佳的使用 ...

  5. Elasticsearch分片、副本与路由(shard replica routing)

    本文讲述,如何理解Elasticsearch的分片.副本和路由策略. 1.预备知识 1)分片(shard) Elasticsearch集群允许系统存储的数据量超过单机容量,实现这一目标引入分片策略sh ...

  6. 当谈到 GitLab CI 的时候,我们该聊些什么(上篇)

    "微服务"这个概念近两年非常热,正在慢慢改变 DevOps 的思路.微服务架构把一个庞大的业务系统拆解开来,每一个组件变得更加独立自治.松耦合.但是,同时也伴随着部署单元粒度越来越 ...

  7. win10 uwp 读取文本GBK错误

    本文讲的是解决UWP文本GBK打开乱码错误,如何去读取GBK,包括网页GBK.最后本文给出一个方法追加文本. 我使用NotePad记事本保存文件,格式ASCII,用微软示例打开文件方式读取,出现错误 ...

  8. Web安全学习笔记(一)

    Web安全学习笔记(一): URL协议 HTTP协议 1. URL 2. HTTP协议 什么是HTTP HTTP的工作原理 HTTP报文 什么是Cookies HTTP请求方式 Referer请求的功 ...

  9. 表单处理的方案与注意事项(servlet)

    摘要 表单是后端程序员用的与接触最多的,我这里例举了常用处理办法,与注意事项 sevlet处理代码 package myform; import java.io.IOException; import ...

  10. 从一个简单案例上手Spring MVC,同时分析Spring MVC面试问题

    很多公司都会用Spring MVC,而且初级程序员在面试时,一定会被问到这方面的问题,所以这里我们来通过一个简单的案例来分析Spring MVC,事实上,我们在培训中就用这个举例,很多零基础的程序员能 ...