(五) Git重置

重置命令的用法

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

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

为可选项,可以使用引用或提交ID,若忽略则相当于使用了HEAD的指向作为提交ID 第一种用法不会重置引用,更不会改变工作区,而是用指定提交状态()下的文件()替换掉暂存区中的文件;第二种用法则会重置引用,根据不同选项对暂存区或工作区进行重置。 动作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哈希值。输出还有一个方便的表达式:@{},含义是引用之前第次改变时的SHA1哈希值。 ~~~ $ git reflog show master | head -5 ~~~
文章导航