错提交代码,或者某个版本代码之后想要回滚回来的话,就会遇到需要回滚代码版本的问题。
根据代码当前提交状态,回滚操作可以分为二类:
- 未提交代码
- 已提交代码
一、回滚未提交代码
只回滚本地代码库(HEAD)内容,不回滚索引(index)和工作区(working)内容。
git reset --soft 版本号
(默认)只回滚本地代码库(HEAD)和索引(index)内容,不回滚工作区(working)内容。
git reset --mixed 版本号
回滚本地代码库(HEAD)、索引(index)和工作区(working)内容。
git reset --hard 版本号
常用命令
回滚到上一个版本
git reset HEAD
回滚到上上个版本
git reset HEAD^
回滚到指定版本
git reset 057d
注:此处回滚的含义是与当前分支远程代码库(target)内容保持一致。
举例说明
参考:git-reset
举例1
# | working | index | HEAD | target |
---|---|---|---|---|
current | A | B | C | D |
soft | A | B | D | D |
mixed | A | D | D | D |
hard | D | D | D | D |
举例2
# | working | index | HEAD | target |
---|---|---|---|---|
current | A | B | C | C |
soft | A | B | C | C |
mixed | A | C | C | C |
hard | C | C | C | C |
二、回滚已提交代码
1. 回滚已经提交,且已发布代码
git revert撤销某次操作,此次操作之前和之后的commit和history都会保留,并且把这次撤销作为一次最新的提交。
git revert是提交一个新的版本,将需要revert的版本的内容再反向修改回去,版本会递增,不影响之前提交的内容。
常用命令
撤销前一次 commit
git revert HEAD
撤销前前一次 commit
git revert HEAD^
撤销指定的版本,撤销也会作为一次提交进行保存
git revert commit fa042ce57ebbe5bb9c8db709f719cec2c58ee7ff
举例说明
代码版本库中间一段提交内容如下:
1 | commit c15ebaadf86bde882035a68e09f0b7832ea271f6 |
如果期望代码回滚到 277563b24904f3f70eb210f6fa1d3f3f1ee914ac 这个状态的话,则需要撤销后一个版本 763ab06edb1b5054fbd12e94317e2f13ac4b2af5 以后的所有代码提交。
执行命令:git revert 763ab06edb1b5054fbd12e94317e2f13ac4b2af5
2. 回滚已经提交,但未发布代码
1 | git commit -m 'initial commit' |