Git学习笔记(五) Git重置

重置命令的用法

用法一:git reset [-q] [<commit>] [--] <paths>...   为了避免路径和引用(或提交ID)同名而发生冲突,可以在<paths>前用--作为分隔

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

<commit>为可选项,可以使用引用或提交ID,若忽略<commit>则相当于使用了HEAD的指向作为提交ID

第一种用法不会重置引用,更不会改变工作区,而是用指定提交状态(<commit>)下的文件(<paths>)替换掉暂存区中的文件;第二种用法则会重置引用,根据不同选项对暂存区或工作区进行重置。

动作1:替换引用的指向,引用指向新的提交ID

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

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

--soft执行1;--mixed执行1、2;--hard执行1、2、3

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

git reset -- filename 仅将文件filenmae的改动撤出暂存区,暂存区中其他文件不该变,相当于git add filename的反向操作

挽救错误的重置

通过.git/logs目录下日志文件记录了分支的变更,默认非裸版本库(带有工作区)都提供分支日志功能,因为core.logallrefupdates的值为true

Git提供了一个git config命令,对这个文件进行操作。使用show子命令可以显示此文件的内容。查看git reflog的输出和直接查看日志文件最大的不同在于显示顺序的不同,即最新改变放在了最前面显示,而且只显示每次改变的最终的SHA1哈希值。输出还有一个方便的表达式:<refname>@{<n>},含义是引用<refname>之前第<n>次改变时的SHA1哈希值。

$ git reflog show master | head -5

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值