自然,你是不会犯错的。不过现在是凌晨两点,你正在赶一份工作报告,你在readme.txt中添加了一行:

$ cat readme.txt
Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
Git tracks changes of files.
My stupid boss still prefers SVN.

在你准备提交前,一杯咖啡起了作用,你猛然发现了“stupid boss”可能会让你丢掉这个月的奖金!

既然错误发现得很及时,就可以很容易地纠正它。你可以删掉最后一行,手动把文件恢复到上一个版本的状态。如果用git status查看一下:

$ git status
# On branch master
# 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:   readme.txt
#
no changes added to commit (use "git add" and/or "git commit -a")

你可以发现,Git会告诉你,git checkout -- file可以丢弃工作区的修改:

$ git checkout -- readme.txt

命令git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:

一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;

一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。

总之,就是让这个文件回到最近一次git commitgit add时的状态。

现在,看看readme.txt的文件内容:

$ cat readme.txt
Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
Git tracks changes of files.

文件内容果然复原了。

git checkout -- file命令中的--很重要,没有--,就变成了“创建一个新分支”的命令,我们在后面的分支管理中会再次遇到git checkout命令。

现在假定是凌晨3点,你不但写了一些胡话,还git add到暂存区了:

$ cat readme.txt
Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
Git tracks changes of files.
My stupid boss still prefers SVN.$ git add readme.txt

庆幸的是,在commit之前,你发现了这个问题。用git status查看一下,修改只是添加到了暂存区,还没有提交:

$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       modified:   readme.txt
#

Git同样告诉我们,用命令git reset HEAD file可以把暂存区的修改撤销掉(unstage),重新放回工作区:

$ git reset HEAD readme.txt
Unstaged changes after reset:
M       readme.txt

git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。

再用git status查看一下,现在暂存区是干净的,工作区有修改:

$ git status
# On branch master
# 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:   readme.txt
#
no changes added to commit (use "git add" and/or "git commit -a")

还记得如何丢弃工作区的修改吗?

$ git checkout -- readme.txt$ git status
# On branch master
nothing to commit (working directory clean)

整个世界终于清静了!

现在,假设你不但改错了东西,还从暂存区提交到了版本库,怎么办呢?还记得版本回退一节吗?可以回退到上一个版本。不过,这是有条件的,就是你还没有把自己的本地版本库推送到远程。还记得Git是分布式版本控制系统吗?我们后面会讲到远程版本库,一旦你把“stupid boss”提交推送到远程版本库,你就真的惨了……

小结

又到了小结时间。

场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file

场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file,就回到了场景1,第二步按场景1操作。

场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库

时光机穿梭---撤销修改相关推荐

  1. 时光机穿梭---管理修改

    现在,假定你已经完全掌握了暂存区的概念.下面,我们要讨论的就是,为什么Git比其他版本控制系统设计得优秀,因为Git跟踪并管理的是修改,而非文件. 你会问,什么是修改?比如你新增了一行,这就是一个修改 ...

  2. 时光机穿梭-管理修改

    现在,假定你已经完全掌握了暂存区的概念.下面,我们要讨论的就是,为什么Git比其他版本控制系统设计得优秀,因为Git跟踪并管理的是修改,而非文件. 你会问,什么是修改?比如你新增了一行,这就是一个修改 ...

  3. git的使用学习(三)时光机穿梭

    1.版本回退 现在,你已经学会了修改文件,然后把修改提交到Git版本库,现在,再练习一次,修改readme.txt文件如下: Git is a distributed version control ...

  4. git学习之时光机穿梭(四)

    时光机穿梭 我们已经成功地添加并提交了一个readme.txt文件,现在,是时候继续工作了,于是,我们继续修改readme.txt文件,改成如下内容: Git is a distributed ver ...

  5. Git《二》时光机穿梭

    Git<二>时光机穿梭 零. 目录 时光机 版本回退 工作区和暂存区 管理修改 撤销修改 删除文件 总结 一. 时光机 我们已经成功地添加并提交了一个readme.txt文件,现在,是时候 ...

  6. 时光穿梭机特效如何制作?建议试试这个时光机穿梭工具

    时光机特效(Time Machine Effect)是一种通过编辑软件创造的图像效果,它可以让您的照片看起来像是从过去或未来穿越而来的.这种效果是通过改变图像的颜色.对比度.曝光和色调等参数来实现的. ...

  7. qt撤销与回退_Git版本控制教程 - Git查阅、撤销修改和版本回退

    查看文件的修改历史 git log --pretty=oneline 文件名 # 显示修改历史 git show 356f6def9d3fb7f3b9032ff5aa4b9110d4cca87e # ...

  8. Git简单操作之时光机穿梭

    时光机穿梭 我们已经成功添加并提交了一个readme.txt文件,于是我们继续修改成如下内容: 现在运行git status命令查看结果: git status命令可以让我们时刻掌握仓库当前的状态,上 ...

  9. 【Git】Git 本地的撤销修改和删除操作

    一:撤销操作 比如我现在在readme.txt文件里面增加一行 内容为555555555555,我们先通过命令查看如下: 在我未提交之前,我发现添加5555555555555内容有误,所以我得马上恢复 ...

最新文章

  1. Makefile 使用总结
  2. QT Creator使用matlab库文件读取.mat文件数据
  3. (chap6 Http首部) 通用首部字段 Cache-Control
  4. ITK:使用写访问权迭代图像中的区域
  5. 千兆光纤收发器测试标准及参数
  6. 深入解读 Knative Eventing 0.7 版本新特性
  7. Ubuntu中恢复rm命令误删文件
  8. 基于Pytorch实现CNN卷积神经网络-Mnist数据集
  9. JSP教程第6讲笔记
  10. 猿编程 python_猿编程客户端下载_猿编程(小学阶段编程课程学习专用) 1.5.2 官方版_极速下载站...
  11. 【STM32】【HAL库】【实用制作】数控收音机(软件设计)
  12. 2021美团校招(一)
  13. SAP 采购订单税率计算、单价取值(S4)
  14. win7上的截图小工具
  15. 团队管理_第一期干部训练营心得
  16. java gnuplot,用 Gnuplot 绘制实验数据
  17. 契约锁电子签章在食品行业全产业链的应用场景
  18. NeHe_001_创建一个OpenGL窗口
  19. 磁悬浮框架飞轮磁轴承技术研究与发展现状
  20. 虚拟机与虚拟主机 区别

热门文章

  1. Windows2003 SQL2005解决系统Administrator密码不知道的问题
  2. 【技术维新 践行精彩】大数据与私有云
  3. mysql数据库解除外键
  4. java基础----Java Collections Framework
  5. Qt学习笔记,再次分析EVA源码之后得出的结论-QListView,QListViewItem(Qt3);Q3ListView,Q3ListViewItem(Qt4)...
  6. 《NIOSII那些事儿》rev7.0 PDF版本发布
  7. RHEL4- DNS服务(六)构建DNS缓存服务器
  8. 整理你的个人IT资料库
  9. CodeForces - 1321E World of Darkraft: Battle for Azathoth(二维偏序+线段树)
  10. 中石油训练赛 - The King’s Ups and Downs(记忆化搜索)