Git step by step 4 之reset用法及案例

[size=large]一、基本介绍
[/size]
对于git reset,manual上有这么一句话:Reset current HEAD to the specified state.
我对这句话的理解是,git reset主要是对本地数据目录进行操作。
对于git reset,一切有图1:
[img]http://dl.iteye.com/upload/attachment/0082/9575/d69015ac-b8cb-3f6f-bbb3-8e5a04ceaf24.jpg[/img]

注:图中的commit 1与commit 2代表两个不同的提交号
解释一下:
reset可以对本地数据目录进行重置(先这么简单的说吧),即①
亦可以对暂存区进行重置,即②
也可以对工作目录进行重置,即③

但是,只有如下组合:
1、只进行①;
2、进行①和②;
3、进行①和②和③。

有种情况,git reset HEAD,看上去只进行了②,但实际上也进行了①,只不过重置前与后没有变化,看上去没有重置。(假设此时HEAD指向提交号为commit 2的commit)

[size=large]二、基本用法[/size]

git reset [-q] [<commit>] [--] <paths>… //-q [只打印出错误,可有可无的参数]
git reset (--patch | -p) [<commit>] [--] [<paths>…]
git reset [--soft | --mixed | --hard | --merge | --keep] [-q] [<commit>]


[size=large]三、用法详解[/size]
假设有状态图2:
[img]http://dl.iteye.com/upload/attachment/0082/9577/940c3195-fc67-3468-83a8-ba71d891fd4b.jpg[/img]

即进行了如下操作:

echo "line1" >> file
git add file
git commit -m "add line1"

echo "line2" >> file
git add file
git commit -m "add line2"

echo "line3" >> file
git add file

echo "line4" >> file



用法1:首先是最简单的,这种默认的方式将重置到HEAD所指向的commit
git reset

那么状态图变为图3:
[img]http://dl.iteye.com/upload/attachment/0082/9589/3e236962-3d82-30b8-aa49-153d3066fbe7.jpg[/img]

看上去只进行了②。

用法2:指定了要重置到HEAD
git reset HEAD

结果同上。

用法3:指定到某一指定的commit
git reset <commit 1>

那么状态图由图2变为图4:
[img]http://dl.iteye.com/upload/attachment/0082/9585/1e670f0c-9cfd-3201-a4ee-5ed7faf9f05b.jpg[/img]

(此时HEAD会指向提交号为commit 1的commit,而本地数据目录中的commit 2会保存在那里,如果你愿意,你还可以用reset重置到commit 2的状态)

用法4:带参数 --soft
git reset --soft<commit 1>

那么状态图和图2一样,只不过HEAD指向了提交号为commit 1的commit。

用法5:带参数 --hard
git reset --hard <commit 1>

那么状态图由图2变为图5:
[img]http://dl.iteye.com/upload/attachment/0082/9581/787a6c3e-98eb-3503-919b-447c02ff86da.jpg[/img]
同样的,HEAD指向了提交号为commit 1的commit。


至于带参数的 --mixed(默认,它和不带参数相同,即用法1),以及其他一些参数,这里就不提了。

用法6:带path参数
git reset -- file

由于图中只有一个file,所以它的状态图同图3相同,这里主要目的是将暂存区的某一指定的file(而不是所有的file)重置到与本地数据目录中的file相同。

[size=large]四、案例[/size]

1、在工作目录中新建的一个文件,被添加到了暂存区,但是添加后突然发现这个文件是有问题的,那么可以用 git reset 或 git reset HEAD。
当然这种用法也不局限于删除新添加的文件的情况,任意对于暂存区进行了更改的操作都可以用git reset 或 git reset HEAD 进行恢复。
Ps:这是一种很常用的用法。

2、
待补充


more:
《Git 权威指南》
[url=https://www.kernel.org/pub/software/scm/git/docs/git-reset.html]man git reset[/url](强烈推荐看的)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值