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

版权声明:个人心得,欢迎来信来函交流。转载请注明出处! https://blog.csdn.net/LEON1741/article/details/81905241

今天遇到一个问题,就是在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 +0800

    imx: mx6sllevk: add MAINTAINERS file
    add MAINTAINERS files
    Signed-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 +0900

    board: samsung: update the MAINTAINERS file
    Update the maintainer from Przemyslaw and Lukasz to me.
    Signed-off-by: Jaehoon Chung <jh80.chung@samsung.com>

猜你喜欢

转载自blog.csdn.net/LEON1741/article/details/81905241