文档章节

【Git 第9课】 撤销修改

Harry_sir
 Harry_sir
发布于 2016/01/02 12:58
字数 780
阅读 18
收藏 0

前面说了,如果你手滑删掉了一个文件,可以用 Git 帮你找回来。同样,如果一个文件被你改来改去面目全非,直到程序无法运行,你累感不爱想要回到开始的状态,Git 也可以帮你轻松搞定。


我们现在直接把 readme.txt 从文件夹中删除。看一下状态:


# On branch master

# Changes not staged for commit:

#   (use "git add/rm <file>..." to update what will be committed)

#   (use "git checkout -- <file>..." to discard changes in working directory)

#

# deleted:    readme.txt

#

no changes added to commit (use "git add" and/or "git commit -a")


注意其中有一句提示:

use "git checkout -- <file>..." to discard changes in working directory


用 git checkout -- <file> 命令舍弃工作目录中的修改。注意 checkout 后面的 --,没有这两个减号就是另一条命令了,后面关于分支的时候会去说它。


那我们就来试一下:


git checkout -- readme.txt


看看文件夹中,消失的文件是不是又回来了?再看下 git status,也回到了没有产生修改的状态。


那么,如果一个修改后的文件已经被暂存了,要如何恢复到之前的状态呢?


我们来改一下 readme.txt,在文件中加点字,然后 git add 添加到暂存区。查看状态:


# On branch master

# Changes to be committed:

#   (use "git reset HEAD <file>..." to unstage)

#

# modified:   readme.txt

#


这里 Git 又给出提示了:

use "git reset HEAD <file>..." to unstage


用 git reset HEAD <file> 命令撤销暂存。


git reset HEAD readme.txt


这条命令并不会更改 readme.txt 里的内容,修改仍然存在,但是文件的状态变回到已修改。


# 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")


你可以修改了重新暂存,也可以用前面的方法把文件恢复。


再进一步,如果文件修改已经被 commit 了,要如何撤销?


一种情况是,你提交了之后发现还漏了几个地方没有改,或者提交的文件中有些小错误,想要撤销回来重新提交。那么你可以用 git commit --amend 来重新提交。


做完修改、暂存之后,运行


git commit --amend


会开启文本编辑器让你修改上次的提交注释,或者通过 -m 参数直接指定。保存退出后,这一次的改动就会被直接加上上一次的提交里,不会产生新的 commit。


你也许觉得,直接再提交一次不就好了。但难免有时候不想因为笔误产生过多提交。再说,程序员调试代码的时候总会有些恶趣味,诸如 print 'believe spring brother' 之类的调试语句,如果最后忘了删干净就提交了,肯定不想再做一次提交去删除。还是直接神不知鬼不觉地清理掉比较好。


还有另一种情况,就是整个上一次的提交你都不想要了,希望回退到上一个提交状态。这时候就需要用到版本回退了。

© 著作权归作者所有

Harry_sir
粉丝 16
博文 80
码字总数 48004
作品 0
朝阳
其他
私信 提问
Git 的 4 个阶段的撤销更改

原文出处:张京 虽然诞生距今已有年之久,网上各种关于的介绍文章数不胜数,但是依然有很多人(包括我自己在内)对于它的功能不能完全掌握。以下的介绍只是基于我个人对于的理解,并且可能生...

张京
2017/11/24
0
0
如何在 Git 里撤销(几乎)任何操作

任何版本控制系统的一个最有的用特性就是“撤销 (undo)”你的错误操作的能力。在 Git 里,“撤销” 蕴含了不少略有差别的功能。 当你进行一次新的提交的时候,Git 会保存你代码库在那个特定时...

AlexMahoneFBI
2015/07/01
197
1
gitの月光宝盒

git作为时下世界最流行的代码版本管理工具,我们无论在工作中还是日常编码时几乎都离不开 git 的使用。但是有时候因为我们自身的误操作,或者其他原来未料到突发事件,需要撤销某个操作或者修...

xlaoyu
2017/12/08
0
0
git的使用和学习(一)本地库的学习和基本操作

版权声明:没事随便转 https://blog.csdn.net/qq_41816123/article/details/84310308 1.为什么使用git 非常好用的分布式开发版本控制系统,用它没错哥们 2.怎么安装git git官网 默认选项一路...

齐码闯天涯
2018/11/21
0
0
图解Git 命令行(一)

0. Git 的相关原理 Git 仓库中的提交记录保存的是你的目录下所有文件的快照,就像是把整个目录复制,然后再粘贴一样,但比复制粘贴优雅许多! Git 希望提交记录尽可能地轻量,因此在你每次进...

tutu__oo
2017/11/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

你知道多少this,new,bind,call,apply?那我告诉你

那么什么是this,new,bind,call,apply呢?这些你都用过吗?掌握这些内容都是基础中的基础了。如果你不了解,那还不赶快去复习复习,上网查阅资料啥的! 通过call,apply,bind可以改变thi...

达达前端小酒馆
今天
5
0
设计模式之命令模式

命令模式的类图 其中的角色有: Client 客户端。只依赖于调用者Invoker、接收者Receiver、以及Command(网上找的图片这里没有画出来),不用关注接收者如何执行命令,只需要告诉调用者需要执行...

陈年之后是青葱
今天
7
0
2. 彤哥说netty系列之IO的五种模型

你好,我是彤哥,本篇是netty系列的第二篇。 欢迎来我的公从号彤哥读源码系统地学习源码&架构的知识。 简介 本文将介绍linux中的五种IO模型,同时也会介绍阻塞/非阻塞与同步/异步的区别。 何...

彤哥读源码
今天
5
0
OSChina 周四乱弹 —— 喵的波粒二象性

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @ 小小编辑推荐:《水墨兰亭》- 李志辉 《水墨兰亭》- 李志辉 手机党少年们想听歌,请使劲儿戳(这里) @巴拉迪维 :卧室里采光要足够好,这样...

小小编辑
今天
45
2
前后端分离接口规范

最近在开发,遇到前后端关于Boolean类型的参数传参和接收的问题: 场景:后台会根据用户是否出车/是否出司机(Boolean类型)来决定后端的业务逻辑(比如费用的计算),前端使用JSON字符串类型...

code-ortaerc
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部