【git】把test分支的合并到了开发分支,想要恢复干净的开发分支,怎么办? 【git reset 和 git revert的区别】
把test分支的合并到了开发分支,想要恢复干净的开发分支,怎么办?
1.首先将现在已经被污染的 开发分支,新checkout一个不同命的相同分支出来,在这个clone分支上搞事情,保留原 开发分支上的开发代码 不要丢失
2.解下来,先根据提交记录,在目标开发分支上的条线上,找到把test分支 合并到 开发分支之前的一个commit 或者前几个节点,总之是选取一个干净的commit节点
3.右键点击 reset,将代码回退到这个指定的commit节点
(原理:git reset的作用是修改HEAD的位置,即将HEAD指向的位置改变为之前存在的某个版本)
(表现:使用reset进行回退后,这个commit节点之后的所有 提交记录+代码 都会被清除。 就是说,执行完reset后,git log查看提交记录,这个节点后的提交记录都会被清除)
(git reset 是 回滚到 某个指定版本)
4.选择 Mixed 点击 Reset
此时会提示
5.然后对项目进行commit操作,下面会显出出来 未被加入Git缓冲区的 一堆红色文件,就是需要删除的文件,即被test分支污染的一堆文件
6.右键直接删除
7.然后 再右键项目,直接 Revert,回滚 当前这个版本的代码
(原理: 有commit1 --> commit2---> commit3,先要想保留commit3,清除commit2,即 使用命令 git revert -n commit2版本号)
(表现:执行结果就是 现在的git log 就是 commit1 --> commit2---> commit3 --->commit4, 即所有提交记录都能看到,不会被清除,但是 commit2这次提交被 回滚了)
(git revert 是回滚某个指定版本,不是 回滚到)
8.这个时候 commit项目,就是没有任何提交记录的
9.然后将master分支往该分支再pull一次,保证该分支能拥有较新的master代码
10.解决完冲突后,该分支就已经成了 较前时间节点的 干净开发分支了
11.最后一步,一定一定 将本地干净的分支 push到远程一个 新建分支上
12. 好了 干净分支恢复完成,最后,就需要 研发同学将 恢复的commitId节点后的所有开发代码,从 那个污染的分支上 compare diff一下,把自己的那个时间点之后的所有 开发代码 复制到 这个干净分支上,完成干净代码的恢复
=====================================