git reset 有三种模式:git reset [--soft | --mixed | --hard] [HEAD]
参考:https://www.runoob.com/git/git-reset.html
--mixed
- --mixed 为默认,可以不用带该参数,用于重置暂存区的文件与上一次的提交(commit)保持一致,工作区文件内容保持不变。
1、 git reset c27948b75a54651bd57058c417a53d4216ea5389 等价于git reset mixed c27948b75a54651bd57058c417a53d4216ea5389
2、git reset HEAD^ # 回退所有内容到上一个版本
3、git reset HEAD^ hello.php # 回退 hello.php 文件的版本到上一个版本
4、git reset 052e # 回退到指定版本
5、实体需求操作:需要回退到箭头指向的这个版本 head:c27948b75a54651bd57058c417a53d4216ea5389
image.png
1、git reset c27948b75a54651bd57058c417a53d4216ea5389 暂存区回退,工作区文件内容保持不变
2、git checkout . 确认工作区文件是否需要,不需要使用checkout .
3、git push --force git要强制覆盖,那么可以使用--force命令。
4、git status 如果有添加的文件可能需要手动删除 (C#代码已经忽略掉的)
--soft
- --soft 参数用于回退到某个版本:
1、git reset --soft HEAD
--hard
- --hard参数撤销工作区中所有未提交的修改内容,将暂存区与工作区都回到上一次版本,并删除之前的所有信息提交:
换句话说,就是你的没有commit的修改会被全部擦掉。
reset --hard 不仅可以撤销提交,还可以用来把 HEAD 和 branch 移动到其他的任何地方。参考:https://www.jianshu.com/p/c2ec5f06cf1a
git reset --hard HEAD
git reset –hard HEAD~3 # 回退上上上一个版本
git reset –hard bae128 # 回退到某个版本回退点之前的所有信息。
git reset --hard origin/master # 将本地的状态回退到和远程的一样
注意:谨慎使用 –hard 参数,它会删除回退点之前的所有信息。
总结:
--hard:重置位置的同时,直接将 working Tree工作目录、 index 暂存区及 repository 都重置成目标Reset节点的內容,所以效果看起来等同于清空暂存区和工作区。
--soft:重置位置的同时,保留working Tree工作目录和index暂存区的内容,只让repository中的内容和 reset 目标节点保持一致,因此原节点和reset节点之间的【差异变更集】会放入index暂存区中(Staged files)。所以效果看起来就是工作目录的内容不变,暂存区原有的内容也不变,只是原节点和Reset节点之间的所有差异都会放到暂存区中。
--mixed(默认):重置位置的同时,只保留Working Tree工作目录的內容,但会将 Index暂存区 和 Repository 中的內容更改和reset目标节点一致,因此原节点和Reset节点之间的【差异变更集】会放入Working Tree工作目录中。所以效果看起来就是原节点和Reset节点之间的所有差异都会放到工作目录中。
网友评论