上一篇,Git撤销add,其实已经讲了用reset命令可以取消commit,这里再啰嗦下。先看:
git如何撤回已经commit • Worktile社区
首先明确一点,无论是commit还是撤销commit,都是在本地暂存区操作,而不是远程仓库,要同步到远程仓库,需要push。
下面按照原文思路讲,再加一些自己的理解:
方法一:使用git reset命令
使用reset,前面已经讲过了,但是,如果之前commit之后又push了,而这次reset后,又push下,那么实现的功能其实是删除了远程仓库的上次push版本,即删除了最后的一个版本!见:
git删除某个版本_千锋教育 (mobiletrain.org)
此文中因为reset加了--hard,所以push要加 -f。
需要注意的是,这种删除版本的操作是不可逆的,即被删除的版本是找不回来的。版本号是会减少到删除的版本之前那一个。
方法二:使用git revert命令
这个命令同样可以实现版本删除功能,即撤销commit功能(本来本文是要讲这个功能哈),同样是只对本地暂存区操作,要同步远程需push下。但是,其实它并不是真的删除了那个版本,而是新增一个去掉那个版本的所有修改的版本,再提交,即,其实版本号是继续增加的。同时,它还有很多好处,直接上文吧:
Git进阶(二):git revert 用法-CSDN博客
对比reset,可以说是revert有三个优点吧,特别是第二点,非常神奇,revert之后的版本,在要合并包含被revert版本的版本(即是被revert版本之后到revert版本之前的这些版本)时,因为这些版本包含这个revert操作,会自动将被revert的版本剔除!个人认为,这是revert的最大优点!
方法三:使用git checkout命令
这就很低级了,就是直接新建一个版本,再提交。版本号继续增加,之前需要删除的版本也还是在,同样,这个版本及之后的版本,如果再和需要删除的版本之后到这个版本之前的版本合并,则还是会带有要删除的版本,也就是没有revert中第二个优点。