参考:
- https://www.jianshu.com/p/c2ec5f06cf1a
- https://www.runoob.com/git/git-reset.html
- https://www.runoob.com/git/git-basic-operations.html
git reset
git reset 命令用于回退版本,可以指定退回某一次提交的版本。
git reset 命令语法格式如下:
git reset [--soft | --mixed | --hard] [HEAD]
有三种模式,分别是 hard, soft, mixed,默认是 mixed 模式,不同的模式会产生不同的效果。
先说第一种模式,hard
hard模式其实很暴力,暴力就显得很简单,git reset --hard commit_id
使用该命令,会将本地分支回滚到commit_id对应的版本,暂存区将被清空。PS:谨慎使用该命令,特别是暂存区有你需要保留的一些更改。
第二种模式,soft
将本地的分支指向commit_id对应的提交,且reset之前和reset之后的提交之间更新的内容,会被还原到暂存区中(变为 to be committed状态),reset之前修改的内容不会丢失。
第三种模式,mixed
该模式为reset的默认模式,该模式和soft之间的差异在于,reset之前和reset之后的提交之间更新的内容,会被还原到工作区中 (重新变为unstage状态),同样的,reset之前修改的内容不会丢失。该模式可用于将暂存区全部修改或某个文件修改重新变为unstage状态,命令如下:
git reset HEAD 或 git reset # 默认是HEAD
git reset HEAD <file> 或 git reset <file>
git checkout
git checkout 可用于检出某分支,或者将某个文件恢复到某个版本,后者的使用方式如下:
git checkout HEAD <file> 或 git checkout <file> 或 git checkout -- <file> # 默认是HEAD
git checkout commit_id <file> 或 git checkout commit_id -- <file>
该命令常用于撤销对某个文件的修改。PS:该命令也要谨慎使用,使用该命令后,会丢失该文件的修改内容。
git 流程两张参考图