一、基本介绍
对于git reset,manual上有这么一句话:Reset current HEAD to the specified state.
我对这句话的理解是,git reset主要是对本地数据目录进行操作。
对于git reset,一切有图1:
注:图中的commit 1与commit 2代表两个不同的提交号
解释一下:
reset可以对本地数据目录进行重置(先这么简单的说吧),即①
亦可以对暂存区进行重置,即②
也可以对工作目录进行重置,即③
但是,只有如下组合:
1、只进行①;
2、进行①和②;
3、进行①和②和③。
有种情况,git reset HEAD,看上去只进行了②,但实际上也进行了①,只不过重置前与后没有变化,看上去没有重置。(假设此时HEAD指向提交号为commit 2的commit)
二、基本用法
git reset [-q] [<commit>] [--] <paths>… //-q [只打印出错误,可有可无的参数]
git reset (--patch | -p) [<commit>] [--] [<paths>…]
git reset [--soft | --mixed | --hard | --merge | --keep] [-q] [<commit>]
三、用法详解
假设有状态图2:
即进行了如下操作:
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:
看上去只进行了②。
用法2:指定了要重置到HEAD
git reset HEAD
结果同上。
用法3:指定到某一指定的commit
git reset <commit 1>
那么状态图由图2变为图4:
(此时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:
同样的,HEAD指向了提交号为commit 1的commit。
至于带参数的 --mixed(默认,它和不带参数相同,即用法1),以及其他一些参数,这里就不提了。
用法6:带path参数
git reset -- file
由于图中只有一个file,所以它的状态图同图3相同,这里主要目的是将暂存区的某一指定的file(而不是所有的file)重置到与本地数据目录中的file相同。
四、案例
1、在工作目录中新建的一个文件,被添加到了暂存区,但是添加后突然发现这个文件是有问题的,那么可以用 git reset 或 git reset HEAD。
当然这种用法也不局限于删除新添加的文件的情况,任意对于暂存区进行了更改的操作都可以用git reset 或 git reset HEAD 进行恢复。
Ps:这是一种很常用的用法。
2、
待补充
more:
《Git 权威指南》
man git reset(强烈推荐看的)
- 大小: 54.9 KB
- 大小: 50.4 KB
- 大小: 48.6 KB
- 大小: 46.7 KB
- 大小: 49.3 KB
- 大小: 50.2 KB
分享到:
相关推荐
* When one step in multi step cherry-pick or revert is reset or committed, the command line prompt script failed to notice the current status, which has been improved. * Many GIT_TEST_* ...
$ git clean -fd && git reset HEAD . && git checkout . $ git checkout -b workshop origin/step-01-fresh-start 这将为您创建一个新的起点。 只需将step-01-fresh-start替换为适当的步骤分支名称即可。
期待来自您的How to get thisgit clone git@github.com:CracKerMe/vue-ssr-cli.gitHow to previewcd vue-ssr-cli && npm inpm run devHow to publishnpm run buildnpm start项目截图Step by step:安装基本
健身房不平衡磁盘安装python -m ...基本用途import gym, gym_unbalanced_disk, timeenv = gym.make('unbalanced-disk-v0')obs = env.reset()for i in range(200): obs, reward, done, info = env.step(env.action_spac
用法 import gym , yumi_gym env = gym . make ( 'yumi-v0' ) env . render () observation = env . reset () while True : env . render () action = env . action_space . sample () observation , reward...
git submodule foreach "git fetch gerrit && git reset --hard gerrit/master" cd qt3d scp -p -P 29418 codereview.qt-project.org:hooks/commit-msg .git/hooks/ git fetch gerrit git checkout --track -b ...
链接到过去的Gridworld环境,以进行危险的转弯 这个gridworld健身环境基于Stuart Armstrong的 要求: 的Python 3 OpenAI体育馆 NumPy 安装 克隆此存储库,并使用pip3安装..._ = env.step(env.action_space.sample()
key_step_exposure_compensation = 1 key_default_exposure_compensation = 0 ; only for facing back camera in android2.3, should be set in android4.0 used_zoom = 1 key_zoom_supported = true key_smooth_...
key_step_exposure_compensation = 1 key_default_exposure_compensation = 0 ; only for facing back camera in android2.3, should be set in android4.0 used_zoom = 1 key_zoom_supported = true key_smooth_...
key_step_exposure_compensation = 1 key_default_exposure_compensation = 0 ; only for facing back camera in android2.3, should be set in android4.0 used_zoom = 1 key_zoom_supported = true key_smooth_...
Git . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 Command Console . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 ...