在多人合作程序开发的过程中,我们有时会出现错误提交的情况,如交叉提交,活着有新代码没有pull直接commit等等一系列情况,此时我们希望能撤销提交操作,让程序回到提交前的样子,本文总结了两种解决方法:回退(reset)、反做(revert)。
一、RESET命令
Git reset 命令有三个主要选项:
git reset --soft;
将HEAD引用指向给定提交。索引(暂存区)和工作目录的内容是不变的,在三个命令中对现有版本库状态改动最小。 git reset --mixed;
HEAD引用指向给定提交,并且索引(暂存区)内容也跟着改变,工作目录内容不变,这个命令会将索引(暂存区)变成你刚刚暂存该提交全部变化是的状态,会显示工作目录中有什么修改。 git reset --hard;
HEAD引用指向给定提交,索引(暂存区)内容和工作目录内容都会变给定提交时的状态,也就是在给定提交后所修改的内容都会丢失(没有commit的内容都会清空,所以请慎用哦)。
具体操作:
我们先分两种场景,
场景1:本地commit了,但还没push云端
场景2: 本地commit后,并且push云端了
对于场景1:
1. 查看版本号:
定位到项目下,使用命令“git log”查看历史提交记录,大概如下:
2. 根据你的需求,选择上面三种的一种命令将版本回退:
如果想将上次的提交内容清空,就选择reset hard,否则用默认reset就可以了
如下:找到你想回到的commit_id,执行
git reset 42079059ff7fe82d0c6cf9ff0fa5a4cef
你会发现代码又变为未提交状态了,后面可以修改再提交,或者拉下最新代码避免冲突,再次提交都行。。
对于场景2:
对于已经push的稍微复杂点,我们可以用如下两种方式解决
1、和场景1 一样处理,然后提交的时候要注意下,这会儿用git push是会失败的,因为我们本地库HEAD指向的版本比远程库的要旧;
所以我们用“git push -f”强制推上去,就可以了。
2、使用git revert
原理: git revert是用于“反做”某一个版本,以达到撤销该版本的修改的目的。
比如,我们commit了三个版本(版本一、版本二、 版本三),突然发现版本二不行(如:有bug),想要撤销版本二,但又不想影响撤销版本三的提交,就可以用 git revert 命令来反做版本二,生成新的版本四,这个版本四里会保留版本三的东西,但撤销了版本二的东西。
具体操作:
1.、git log查看版本号:
2、使用“git revert -n 版本号”反做,版本号就是你想反做的那次commit_id,比如
git revert -n 8b89621019c9adc6fc4d242cd41daeb13aeb9861
执行完这个,你会发现你本地生成了逆向代码,就是你反做那次修改的内容全被还原了,下面你就可以直接提交云端了
(注意: 这里可能会出现冲突,那么需要手动修改冲突的文件)
over~