今天遇到一个问题,就是在git工程下修改了一些代码,结果发现搞错了,需要撤销掉所有改动的内容,还原到之前的初始版本,换言之就是放弃自己在本地所做的修改。该怎么做呢?要分以下几种情况来区别对待:

一、尚未使用“git add”缓存过代码

1、对于指定的单个文件,可以使用下面的命令放弃对它的修改:

git checkout -- filename                    # 比如:git checkout -- readme.md

注意:不要忘记中间的 “–” ,不写就成了检出分支了!!

2、若想放弃所有的文件修改,可以使用下面的命令:

git checkout .                              # 注意checkout后面有一个空格,然后带一个.号

注意:此命令用来放弃掉所有还没有加入到缓存区(就是 git add 命令)的修改:内容修改与整个文件删除。但是此命令不会删除掉刚新建的文件。因为刚新建的文件还没已有加入到 git 的管理系统中。所以对于git是未知的。自己手动删除就好了。

3、若想要删除新增的文件,除了手动删除外,也可以使用下面的命令:

git clean -df                               # 从工作目录中移除没有track的文件

4、综上,若想要彻底放弃全部修改的内容(包括新增的文件,以及对现有文件的修改),则可以一次性使用下面的命令:

git checkout . && git clean -df             # 注意checkout后面有一个空格,然后带一个.号

注意:这里用到了git clean命令,这个命令主要是用来从你的工作目录中删除所有没有tracked过的文件,具体的用法,可以参见我的另外一篇博客(玩转GIT系列之【git clean的用法】)。

二、已经使用“git add”缓存了代码

1、对于指定的单个文件,可以使用下面的命令放弃对它的修改:

git reset HEAD filename                     # 比如:git reset HEAD readme.md

2、若想放弃所有的文件修改,可以使用下面的命令:

git reset HEAD .                            # 注意checkout后面有一个空格,然后带一个.号

注意:此命令用来清除 git 对于文件修改的缓存。相当于撤销 git add 命令所在的工作。在使用本命令后,本地的修改并不会消失,而是回到了(一)所示的状态。继续用(一)中的操作,就可以放弃本地的修改。

三、已经用“git commit”提交了代码

1、若想要回退到前一次commit的状态,可使用下面的命令:

git reset --hard HEAD^                      # 注意HEAD后面有一个^符

注意:在windows的cmd控制台下输入上述命令时,系统有可能会提示more?,让你继续补充,多按几次回车后就报错如下:

fatal: ambiguous argument 'HEAD': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'

这是因为cmd控制台中换行符默认是^,而不是\ ,所以它的more?的意思是问你下一行是否需要再输入,而^ 符号就被当做换行符而被git命令忽略掉了。

解决方法有如下几种:

  • 加引号:git reset –hard “HEAD^” ;
  • 加一个^:git reset –hard HEAD^^ ;
  • 换成~:git reset –hard HEAD~ 或者 git reset –hard HEAD~1(~ 后面的数字表示回退几次提交,默认是一次);

2、若想要回退到指定的某一次commit的状态,则使用下面的命令:

git reset --hard commitid                   # 这里的commitid是一个代号,如下注释

注意:这里的commitid就是提交时的标签,可通过git log命令查看,如下所示:

commit 47895838a4fbe867ba9a170c6d1ea6a794095025
Author: Peng Fan <peng.fan@nxp.com>
Date:   Tue Dec 27 20:19:07 2016 +0800imx: mx6sllevk: add MAINTAINERS fileadd MAINTAINERS filesSigned-off-by: Peng Fan <peng.fan@nxp.com>Cc: Stefano Babic <sbabic@denx.de>commit d3c083a94722ab9089b6085ef9e95dd4858bc206
Author: Jaehoon Chung <jh80.chung@samsung.com>
Date:   Tue Dec 27 20:08:13 2016 +0900board: samsung: update the MAINTAINERS fileUpdate the maintainer from Przemyslaw and Lukasz to me.Signed-off-by: Jaehoon Chung <jh80.chung@samsung.com>

玩转GIT系列之【如何放弃本地/服务器端所做的修改】相关推荐

  1. 玩转SVN系列之【如何放弃本地/服务器端所做的修改】

    前几天我遇到了如何在GIT下放弃本地所做的修改的问题,并写了一篇博客来整理其中的思路,详见(玩转GIT系列之[如何放弃本地/服务器端所做的修改]).但是今天,我在SVN下遇到了同样的问题,而且是lin ...

  2. 玩转GIT系列之【git的分支操作(查看分支/切换分支/新建分支/删除分支)】

    一.查看分支 1.查看全部分支 git branch -a 2.查看本地分支 git branch -l 3.查看远程分支 git branch -r 二.切换分支 假设本地当前处于master分支下 ...

  3. 玩转GIT系列之【git pull和git fetch的区别】

    大家都知道,git中从远程的分支获取最新的版本到本地有2个命令,git pull和git fetch.但是,这两个命令究竟有什么区别?使用时候该怎么选择呢?很多人不是很清楚,我自己也不是很清楚.今天就 ...

  4. 玩转GIT系列之【git submodule update出错提示子模组未对路径注册】

    今天在github上找到了一个很有意思的项目,叫做listen1[https://github.com/listen1],它是一个开源的项目,可以从各大音乐网站自动化搜索歌曲.避免某个特定的网站因为版 ...

  5. 玩转GIT系列之【如何配置GIT的用户名/密码/密钥】

    安装完Git之后,必须对其进行设置,否则将无法联网工作. 1.设置用户名和邮箱 首先必须设置git的用户名和邮箱地址,否则的话,你往服务器git push时会失败. $ git config --gl ...

  6. 玩转GIT系列之【如何恢复windows系统下git的状态图标显示】

    装完TortoiseGit之后,按理说会在所有git仓库的目录图标处显示出对应的叠加小图标,如下图所示. 根据这些图标的内容,可以非常明显的分辨出各个目录.文件当前的状态,是否被更改过,是否与仓库内容 ...

  7. 玩转GIT系列之【git切换到某个tag之后提示“detached HEAD】

    git clone 整个仓库后使用 git checkout tag_name 就可以取得该 tag 对应的代码了. 但是,这时候 git 可能会提示你当前处于一个"detached HEA ...

  8. 每天三分钟玩转Git(已完结)

    关于Git 好文推荐 完成本系列文章的阅读以后,你将掌握git的基本概念与git的基本命令,可以在本地随心所欲的完成代码的提交撤销保存修改等操作.可以流畅的参与多人协作,本文致力于快速的入门,学完本文 ...

  9. 玩转 IDEA 系列教程——强烈推荐官方中文(汉化)插件!

    玩转 IDEA 系列教程 每天进步一点,不做curd工程师与Api调用工程师 欢迎访问个人博客网站:https://www.coder-programming.cn/ IDEA2020.1版本的到来, ...

最新文章

  1. linux环境下nacos的安装+启动,阿里云服务器安装nacos
  2. Java学习总结:58(Collections工具类)
  3. php中file_get_contents如何读取大容量文件
  4. 5软件开发与软件测试
  5. 解决python3 UnicodeEncodeError: 'gbk' codec can't encode character '\xXX' in position XX
  6. python用于什么-Python用于哪些领域
  7. js GPS 百度地图坐标转换
  8. 在Hue中创建一个Oozie工作流
  9. Java基础篇:泛型与类型擦除
  10. java客户端作为kafka生产者测试
  11. 十大笔记本品牌型号命名规则【联想】
  12. unity算法面试_Unity面试准备
  13. 上传新文件项目到svn上
  14. HFSS(ANSYS Electronics)仿真2.45GHz矩形微带天线
  15. 解决linux(centos7)重新安装mysql systemctl start mysqld.service时报错
  16. 【深度学习基础-02】概念学习-例子3则
  17. java理论笔试题_Java基础笔试题及答案
  18. gif制作软件 ScreenToGif
  19. java实例化类之后如何赋值_深入理解Java对象的创建过程:类的初始化与实例化...
  20. Android权限管理原理(含6.0)

热门文章

  1. urllib库中cookie的使用
  2. 2018届应届生android面试总结
  3. 学界 | 马里兰大学研究:人脑神经网络的动态变化和声音感知
  4. WSFC2008R2跨群集迁移WSFC2012R2
  5. TeliaSonera计划2018年推出5G服务
  6. 认识本质:黑天鹅、关键时刻与张小龙的产品观
  7. Activity后台运行一段时间回来crash问题的分析与解决
  8. RHEL5.8安装Oracle10g
  9. [转载] 杜拉拉升职记——06 预算与排期
  10. 前端 圆形进度图_CSS3+JS实现静态圆形进度条