一、git reset
1、回滚到某个commit版本,这个commit之后的提交log全部没了。
2、当回滚时,工作区和暂存区还有文件没有提交或者stash时:
--soft
:只回退版本库,工作区和暂存区的内容不回退。
--mixed(默认)
:回退版本库和暂存区,工作区中的内容不回退。
--hard
:工作区,暂存区,版本库中的内容都回退到指定的提交。(危险的)
3、命令:回滚到某一commitId,若git push不上去,则-f强制推送。
git reset coommitId
git push -f origin 分支名
二、git revert
1、回滚某一个提交的所有代码,之前的提交log都在,创建了一个新的log记录回滚这次提交。
2、git revert <commit>
命令:
这个命令会生成一个新的提交记录,新的提交记录就是把需要移除的提交撤销掉,所生成的新提交。
如果工作区或暂存区还有修改未提交,那么会提示需要先提交或存储起来这些文件。
如果在移除的过程中发生了冲突,可以在解决了冲突后,使用
git add
命令添加修改的冲突文件到暂存区中,在使用git revert --continue
来继续操作。如果不想继续操作,当然也可以使用
git revert --abort
命令来停止移除操作,恢复到执行git revert <commit>
命令之前的状态。如果
revert
移除的过程中出现冲突,需要把这些冲突解决才可以继续操作。我们可以使用git revert --skip
命令来跳过一个commit的冲突解决。如果后续还有冲突,也同样如此进行跳过,直到全部冲突解决完成。但是使用
git revert --skip
命令跳过的commit,将会在历史提交记录中被删除(reflog
命令还是可以看到的),所以git rebase --skip
这个命令慎用。
三、区别
revert命令
是撤回某个改动,reset
命令撤回到某个改动