• 【Git 学习三】深入理解git reset 命令


    重置命令(git reset)是Git 最常用的命令之一,也是最危险最容易误用的命令。来看看git reset命令用法。

    -----------------------------------------------------------------------------------------------------------

    用法一:git reset [-q]  [<commit>] [--] <paths》.....

    用法二:git reset [--soft | --mixed [-N] | --hard | --merge | --keep] [-q] [<commit>]

     -----------------------------------------------------------------------------------------------------------

    上面列出了两个用法,其中<commit>都是可选项,可以使用引用或提交ID,如果省略<commit>则相当于使用了HEAD的指向作为提交ID.

    上面列出的两种祖坟的区别在于,第一种用法在命令中包含路径<paths>.为了避免路径和引用(或者提交ID)同名而发生冲突,可以在<paths>前用两个连续的短线(减号)作为分隔。

    第一种用法(包含了路径<paths>的用法)不会重置引用,更不会改变工作区,而是用指定提交状态(<commit>)下的文件(<paths>)替换掉暂存区中的文件。例如命令git reset HEAD <paths>相当于取消之前执行的git add <paths>命令时改变的暂存区。

    第二种用法(不使用路径<paths>的用法)则会重置引用。根据不同的选项,可以对暂存区或工作区进行重置。参照下面的版本库模型图,来看一看不同的参数对第二种重置语法的影响。

    使用参数 --hard, 如:git reset --hard <commit>.

        会执行上图中的全部动作1,2,3,即:

        1.替换引用的指向。引用指向新的提交ID.  

        2.替换暂存区。替换后,暂存区的内容和引用指向的目录树一致。

        3.替换工作区。替换后,工作区的内容变得和暂存区一致,也和HEAD所指向的目录树内容相同。

    使用参数 --soft, 如:git reset --soft <commit>.

        会执行上图中的操作1。即只更改引用的指向,不改变暂存区和工作区。

    使用参数 --mixed或不使用参数(默认为 --mixed),如:git reset <commit>.

        会执行上图中的操作1和操作2.即更改引用的指向及重置暂存区,但是不改变工作区。

    下面通过一些示例,看一下重置命令的不同用法。

    命令:git reset

        仅用HEAD指向的目录树重置暂存区,工作区不会受到影响,相当于将之前用git add命令更新到暂存区的内容撤出暂存区。引用也未改变,因为引用重置到HEAD相当于没有重置。

    命令:git reset HEAD

        同上

    命令:git reset -- filename

        仅将文件filename 的改动撤出暂存区,暂存区中其它文件不改变。相当于对命令git add filename 的反操作。

    命令:git reset HEAD filename

        同上

    命令:git reset --soft HEAD^

        工作区和暂存区不改变,但是引用向前回退一次。当对最新提交的提交说明或提交的更改不满意时,撤销最新的提交以便重新提交。

    命令:git reset HEAD^

        工作区不改变,但是暂存区会回退到上一次提交之前,引用也会回退一次。

    命令:git reset --mixed HEAD^

        同上

    命令:git reset --hard HEAD^

        彻底撤销最近的提交。引用回退到前一次,而且工作区和暂存区都会回退到上一次提交的状态。自行一次以来的提交全部丢失。

  • 相关阅读:
    Java 数据库操作oracle增删改查,通用封装基于hashmap
    Python 自动化paramiko操作linux使用shell命令,以及文件上传下载linux与windows之间的实现
    Java利用 ganymedssh2build.jar来上传文件到linux以及下载linux文件以及执行linux shell命令
    Java Calendar and SimpleDateFormat 时间模块
    Java 读取properties
    Java java httpclient4.5 进行http,https通过SSL安全验证跳过,封装接口请求 get,post(formdata,json)封装,文件上传下载
    Python 基于request库的get,post,delete,封装
    更法第一 (zz)
    北京将投资707亿元建三条地铁新线 (zz.IS2120@BG57IV3)
    fgetws 讀取Unicode文件 (zz.IS2120@BG57IV3)
  • 原文地址:https://www.cnblogs.com/xixiuling/p/10251077.html
Copyright © 2020-2023  润新知