Git-撤销/回滚操作

git结构和各操作之间的关系

Git-撤销/回滚操作_第1张图片
WorkDir进行add操作将当前修改同步到 Index,执行commit操作同步到Head,执行push上传到Server。

撤销add操作

Git-撤销/回滚操作_第2张图片
git reset [HEAD/commitid] 使用HEAD或者commitid覆盖Index,不影响Head和WorkDir,如果是在commit之后执行这个操作相当于同时撤销了commit和add操作
git reset [HEAD/commitid] – file 针对某个文件使用HEAD或者commitid覆盖Index,不影响Head和WorkDir

撤销commit操作

Git-撤销/回滚操作_第3张图片
git reset –soft HEAD^ 重置HEAD到上一版本,即撤销commit操作,不影响index和workdir。
git reset –soft HEAD^1 ^后面的数字表示恢复到哪个父提交的版本,一个提交可能会对应多个父提交,用于指定回到哪个
git reset –soft commitid 后面添加comiit_id指明回退到哪个版本

撤销commit和add

Git-撤销/回滚操作_第4张图片
git reset –mixed HEAD^ 效果同git reset HEAD^
git reset –mixed HEAD^1 ^后面的数字表示恢复到哪个父提交的版本,一个提交可能会对应多个父提交,用于指定回到哪个

撤销commit、add操作,并将本地版本也重置为上一版本

Git-撤销/回滚操作_第5张图片
git reset –hard HEAD^ 重置head到上一版本,会覆盖index, –hard会使head、index、workdir都重置回之前的版本,远程服务器上不会变,如果希望远程服务器上也回到上一版本的话,就使用一下git push –force。
git reset –hard HEAD^1 ^后面的数字表示恢复到哪个父提交的版本,一个提交可能会对应多个父提交,用于指定回到哪个
git reset –hard commitid 用commit_id指定回到哪次 commit

git revert

git revert commitid 使用某一次提交覆盖当前,已达到恢复到某次的效果。revert之后执行一次git push同步到server。

git reset 和 git revert 的区别

git reset 简单暴力的将版本置回到某个版本,现在有过a、b、c、d四次提交,提交顺序为a、b、c、d,现在为d。使用git reset恢复到a之后,看git log,就只剩下a了,b、c、d都不见了。使用git revert恢复到a之后,看git log,会发现a、b、c、d都在,多了e操作,e操作为“revert a”。
原始log:
Git-撤销/回滚操作_第6张图片
执行过git reset之后:
Git-撤销/回滚操作_第7张图片
可以看到commitid为7f****的log记录已经没有了

再来看一下revert:
Git-撤销/回滚操作_第8张图片
解决完冲突,revert之后:
Git-撤销/回滚操作_第9张图片
可以看到这里多了一条“Revert ‘commit add’”的记录。

你可能感兴趣的:(git)