本节内容来自(git 权威指南)
git checkout与git reset同样都有让文件恢复到某一状态的功能,都是具有危险的命令,但是会有一些区别。下面对比说一下。
git reset有两种用法:
用法一: git reset [-q] [
] [--] ....用法二: git reset [--soft | --mixed | --hard | --merge | --keep] [-q] []
其中为可选项可以为引用也可以是类似于02b26a4的提交ID,省略相当于使用了HEAD的指向作为提交ID
第一种用法在命令中包含了路径
,可以避免路径和引用(或者提交ID)同名而发生冲突,可以在前用两个连续的短线做为分隔。这种用法不会重置引用,更不会改变工作区而是用指定提交状态()下的文件()替换掉暂存区的文件。
第二种用法会重置引用。先看下图:
命令格式: git rest [--soft | --mixed | --hard ]
使用参数参数 --hard会执行上图中的全部动作1,2和3.
1. 替换引用的指向。引用指向新的提交ID
2. 替换暂存区。替换后,暂存区的内容和引用指向的目录树一致
3. 替换工作区。替换后,工作区的内容变得和暂存区一致,也和HEAD把指向的目录树内容相同
使用--soft 会执行上图中的动作1,只更改了引用的指向,不改变暂存区和工作区
使用--mixed 或不使用参数,会执行上图中的动作1和2,即更改引用的指向和重置暂存区,但是不改变工作区。
git checkout 有以下三种常见用法:
用法一:git checkout [-q] [
] [--] ....用法二: git checkout []
用法三: git checkout [-m] [ [-b | --orphan] [] ]
第一种与第二种用法的区别在于,第一种用法在命令中包含路径
为了避免路径和引用(或提交ID)同名而发生冲突。第一种用法中省略相当于从暂存区(index)中检出。
与reset对比: reset默认值是HEAD,checkout默认值是暂存区(index)
第三种用法主要是创建和银的到新的分支,新的分支从指定的提交开始创建。
checkout与版本库的关系: