一、回滚代码(git revet && git reset)
现在master分支指向的是“git revert”这个commit,目标:希望将版本回滚到上次“final”的这次commit。
1、git revert
git revert相当于用一次新的commit达到恢复指定commit的目的。
**git revert可以指定恢复某一特定的commit,**比如想恢复commit:C的提交,可以执行以下代码:
git revert C
git commit -m "revert C"
此时,commit链就变为了: A -> B -> C -> D->'revert C'
注意:revert只恢复了C本次的commit,在C后面D的commit并没有发生变化。
演示:(本例想要从git revert 回到final,相当于不要git revert的提交)
git revert b8e6ad58(这个是git revert这次的hash值版本号)
若想要把final、git revert、revert 'git revert' 这三次commit合并成一次commit,更美观,可用如下代码:
git rebase -i HEAD~3 (合并三次commit)
进入vim编辑器进行操作:
p, pick <commit> = use commit
s, squash <commit> = use commit, but meld into previous commit
成功,若此时想把此次final的commit 改个名字,用以下指令:
git commit --amend
2、git reset
现在master分支指向的是“git reset”这个commit,目标:希望将版本回滚到上次“final”的这次commit。
git reset的作用是修改HEAD的位置,即将HEAD指向的位置改变为之前存在的某个版本。
(git reset指定一个版本号,则该版本号之后的所有commit全部消失)
适用场景: 如果想恢复到之前某个提交的版本,且那个版本之后提交的版本我们都不要了,就可以用这种方法。
演示:
git reset b3765e30(直接指定想要回滚到的final的版本号)
此时master分支已经指向了finaal这次commit,而这个uncommitted changes是git reset分支撤销带来的。
git reset后可以接三种参数(--hard、--mixed、--soft)
【1】--hard
会同时重置repository、stage、workspace
【2】--mixed
会重置repository、stage,只保留workspace中的改动
【3】--soft
会重置repository,但保留stage、workspace中的改动
3、git工作区的图例:
- workspace(工作目录):本地直接编辑的结果
- stage/index(索引区): workspace 内的内容可暂存到stage中
- repository(仓库):将当前stage打包起来,作为一次归档,提交到repository中
.