git reset
git-reset - Reset current HEAD to the specified state
git-reset - Reset current HEAD to the specified state
移动HEAD指针到指定的版本(state)
用git log可以查看提交历史,以便确定要回退到哪个版本
用git reflog查看命令历史,以便确定要回到未来的哪个版本
git reset [-q] [<tree-ish>] [--] <paths>…
git reset (--patch | -p) [<tree-ish>] [--] [<paths>…]
git reset [--soft | --mixed [-N] | --hard | --merge | --keep] [-q] [<commit>]
对于整体
git reset的三个参数–soft, --mixed, --hard,mixed是默认参数,三个参数的控制范围如下图所示
参数 | 工作区 | 暂存区 | 仓库 |
---|---|---|---|
soft | no | no | yes |
mixed | no | yes | yes |
hard | yes | yes | yes |
因为commit之后是暂存区的内容放在仓库里,所以暂存区会变成空的,reset mixed和hard时,暂存区都是空的,soft则是没有清空暂存区,使用当前的暂存区
https://blog.csdn.net/qq_22337877/article/details/73249912
git reset # 将仓库区缓存区恢复到最后一次提交的状态,工作区不受影响
git reset HEAD # 同 git reset
git reset --soft HEAD~ # 工作区和暂存区不变,仓库区向前回退一次,回到倒数第二次提交的状态
git reset HEAD~ # 工作区不变,暂存区和仓库索引都会回退一次,回到倒数第二次提交的状态
git reset --hard HEAD~ # 工作区暂存区仓库索引都回退到一次,回到倒数第二次提交的状态
对于文件
对于文件了来说reset的作用和对于整体来说有很大的不一样
git reset -- filename # 将文件从缓存区中撤销,而不影响工作区的
git reset HEAD filename #同上 用HEAD指向想恢复的版本
reset ID file.txt # 同上 用具体的ID指向想恢复的版本
注意
1.git reset 移动了HEAD和分支指针,而git checkout只是移动head指针,所以git checkout用来切换不同分支和检查历史版本,reset多用于重置缓存区
2.提交后,修改工作区,此时使用git checkout
或者git reset
都不会更改工作区的内容.所以要养成良好的习惯,当使用checkout
或者reset
时都先进行提交.
https://blog.csdn.net/longintchar/article/details/82314102
参考:
https://www.cnblogs.com/fengff/p/10822006.html