Reset current HEAD to the specified state
用于将当前
HEAD
复位到指定状态(一般用于撤消之前的一些操作)
相当于对 git add
命令的反向操作。
和 revert
的区别:reset
命令会抹去某个提交记录 commit id
之后的所有提交 commit
。
# 撤销暂存区的修改,重新放回工作区git reset <file-name># 回退 add 到暂存区里的文件,还原为(HEAD commit 里面该文件的状态)# 会撤销从上次提交之后的一些操作git reset HEADgit reset HEAD -- <file-name># 回滚当前分支的指针到指定提交版本,同时重置暂存区,但工作区不变(默认就是-mixed参数)git reset <commit-id>
已经将更改提交 commit 到本地,需要撤回提交。
# 语法git reset --soft <commit-id>git reset --soft <HEAD~n># 示例# 回退上次提交 coomit 的修改记录放回暂存区(也就是 add 之后存放区域)git reset --soft HEAD~1# 回退至三个版本之前,只回退了提交的信息,暂存区和工作区与回退之前保持一致# 如果还要提交,直接 commit 即可git reset --soft HEAD~3
回退至指定版本
# 回退至指定提交版本# 先查看提交日志git log> commit 2xx> commit 1xx# 回退到 1xxgit reset 1xx
# 回滚至上个版本,它将重置 HEAD 到另外一个提交记录,并且重置暂存区以便和 HEAD 相匹配,但是也到此为止。工作区不会被更改。git reset --mixed HEAD^# 回退到指定提交版本,但保持暂存区和工作区不变git reset --keep <commit-id>
已变更的文件都未添加到暂存区,撤销了 commit 和 add 的操作。
回到某次提交的状态,修改都会抹掉,所以谨慎使用。
# 重置暂存区与工作区,与上一次提交保持一致git reset --hard# 回退到指定的提交版本,暂存区和工作区也会与变为指定提交版本一致git reset --hard <commit-id>
已追踪文件的变更内容都消失了,撤销了 commit
和 add
的操作,同时撤销了本地已追踪内容的修改;未追踪的内容不会被改变。从上面的效果可以看到,文件的修改都会被撤销。-hard 参数需要谨慎使用。
在实际开发中经常出现这样的情形:你正在开发一个大的新功能(工作在分支:feature
中),此时来了一个紧急的 BUG 需要修复,但是目前在工作区中的内容还没有成型,还不足以提交,但是又必须切换的另外的分支去修改 BUG。
📍 示例:
# you were working in 'feature' branchgit checkout feature# develop new featuregit commit -a -m "snapshot WIP" # (1)git checkout master# fix buggit commit # commit with real loggit checkout featuregit reset --soft HEAD^ # go back to WIP state # (2)git reset # (3)
reset
删除了 WIP commit
,并且把工作区设置成提交 WIP 快照之前的状态。git reset
将会清理索引成为尚未提交”snapshot WIP“时的状态便于接下来继续工作。