玩转GIT系列之【如何放弃本地/服务器端所做的修改】
今天遇到一个问题,就是在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系列之【如何放弃本地/服务器端所做的修改】相关推荐
- 玩转SVN系列之【如何放弃本地/服务器端所做的修改】
前几天我遇到了如何在GIT下放弃本地所做的修改的问题,并写了一篇博客来整理其中的思路,详见(玩转GIT系列之[如何放弃本地/服务器端所做的修改]).但是今天,我在SVN下遇到了同样的问题,而且是lin ...
- 玩转GIT系列之【git的分支操作(查看分支/切换分支/新建分支/删除分支)】
一.查看分支 1.查看全部分支 git branch -a 2.查看本地分支 git branch -l 3.查看远程分支 git branch -r 二.切换分支 假设本地当前处于master分支下 ...
- 玩转GIT系列之【git pull和git fetch的区别】
大家都知道,git中从远程的分支获取最新的版本到本地有2个命令,git pull和git fetch.但是,这两个命令究竟有什么区别?使用时候该怎么选择呢?很多人不是很清楚,我自己也不是很清楚.今天就 ...
- 玩转GIT系列之【git submodule update出错提示子模组未对路径注册】
今天在github上找到了一个很有意思的项目,叫做listen1[https://github.com/listen1],它是一个开源的项目,可以从各大音乐网站自动化搜索歌曲.避免某个特定的网站因为版 ...
- 玩转GIT系列之【如何配置GIT的用户名/密码/密钥】
安装完Git之后,必须对其进行设置,否则将无法联网工作. 1.设置用户名和邮箱 首先必须设置git的用户名和邮箱地址,否则的话,你往服务器git push时会失败. $ git config --gl ...
- 玩转GIT系列之【如何恢复windows系统下git的状态图标显示】
装完TortoiseGit之后,按理说会在所有git仓库的目录图标处显示出对应的叠加小图标,如下图所示. 根据这些图标的内容,可以非常明显的分辨出各个目录.文件当前的状态,是否被更改过,是否与仓库内容 ...
- 玩转GIT系列之【git切换到某个tag之后提示“detached HEAD】
git clone 整个仓库后使用 git checkout tag_name 就可以取得该 tag 对应的代码了. 但是,这时候 git 可能会提示你当前处于一个"detached HEA ...
- 每天三分钟玩转Git(已完结)
关于Git 好文推荐 完成本系列文章的阅读以后,你将掌握git的基本概念与git的基本命令,可以在本地随心所欲的完成代码的提交撤销保存修改等操作.可以流畅的参与多人协作,本文致力于快速的入门,学完本文 ...
- 玩转 IDEA 系列教程——强烈推荐官方中文(汉化)插件!
玩转 IDEA 系列教程 每天进步一点,不做curd工程师与Api调用工程师 欢迎访问个人博客网站:https://www.coder-programming.cn/ IDEA2020.1版本的到来, ...
最新文章
- linux环境下nacos的安装+启动,阿里云服务器安装nacos
- Java学习总结:58(Collections工具类)
- php中file_get_contents如何读取大容量文件
- 5软件开发与软件测试
- 解决python3 UnicodeEncodeError: 'gbk' codec can't encode character '\xXX' in position XX
- python用于什么-Python用于哪些领域
- js GPS 百度地图坐标转换
- 在Hue中创建一个Oozie工作流
- Java基础篇:泛型与类型擦除
- java客户端作为kafka生产者测试
- 十大笔记本品牌型号命名规则【联想】
- unity算法面试_Unity面试准备
- 上传新文件项目到svn上
- HFSS(ANSYS Electronics)仿真2.45GHz矩形微带天线
- 解决linux(centos7)重新安装mysql systemctl start mysqld.service时报错
- 【深度学习基础-02】概念学习-例子3则
- java理论笔试题_Java基础笔试题及答案
- gif制作软件 ScreenToGif
- java实例化类之后如何赋值_深入理解Java对象的创建过程:类的初始化与实例化...
- Android权限管理原理(含6.0)