Git技巧之git reset使用详解

Git中reset命令是一条很重要的命令,它的主要用途是重置分支引用的指向。
分支引用是什么?分支引用即HEAD所指向的分支。可以在.git/HEAD文件中查看:
工作区中执行:$cat .git/HEAD
可以看到输出:refs/heads/分支名,我们假定分支名为newbranch,即当前我们位于newbranch分支,newbranch就是分支引用,我们打开/refs/heads/newbranch:
工作区中执行:$cat .git/refs/heads/newbranch
可以看到输出是一个40位hash值,该值就是当前newbranch指向的提交ID。

现在开始介绍git reset的用法:
reset命令有两种用法:
用法一:
               git reset [-q] [<commit>] [--] <path>
注意:[]为可选项,就是可以不写,而<>则是必填项,这里path就是必填项,所以一看到有路径的git reset指令,就是用法一。
用法一的作用是:用指定的commit所指向的目录树中的path路径下文件替换暂存区中的文件。
用法一的例子:
1.$git reset .     即用HEAD指向的目录树中的文件替换暂存区中对应文件,该用法可以撤销add到暂存区的改动,相当于git add -u的逆操作。注意不是对$git add -A的你操作,它只对add命令修改,删除暂存区文件的情况有效,对暂存区文件新建的情况无效,要注意。
2.$git reset a.txt     相当于git add a.txt的逆操作。但是如果a.txt是新建的文件,则没有效果。


用法二:
               git reset [--soft|--hard|--mixed|--merge|--keep] [-q] [<commit>]
用法二的作用是:使HEAD指向的分支引用,指向commit对应的提交,如果没指定commit,则默认为HEAD。同时根据--soft,--hard,--mixed,--merge,--keep选项来决定
是否需要对工作区和暂存区进行改动,不填的情况下默认为--mixed。它们的作用如下:
--soft:工作区,暂存区不动。
--hard:使暂存区的目录树与工作区的一致(使暂存区的文件引用和工作区的引用一致,而这些文件实际上都存放在对象库中),用暂存区的目录树覆盖工作区,但是工作区中的Untracked的文件不受影响。
--mixed:默认情况。使暂存区的目录树与工作区一致,工作区不动。
--merge:(我的理解)如果commit与暂存区之间的分歧文件,在本地工作区中存在没有add的改动(Untracked的文件不算),那么reset会失败。如果本地工作区中的改动都提交了,那么--merge相当于--hard。
--keep:没搞懂。
用法二的例子:git reset --hard HEAD^     将分支引用指向HEAD对应的上一次提交并覆盖工作区以及工作区中的Tracked文件。

后记:git reset 还有很多疑问没有解决,单纯为个人学习记录。如有错误或补充,请不吝赐教。



评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值