一、目标
本博文中介绍的git操作要达到的目标为:使用同一分支,回滚到之前的某一历史版本A,但是在该分支上再次提交时,还保留从该历史版本A到当前版本的所有提交历史。
例如分支master有如下提交历史commit 1—> commit 2—>commit 3:
要达到的目标为:回滚到commit 1,在该分支上继续提交时,还要保存commit 2和commit 3的提交历史,也即再次提交时,提交历史为:
commit 1—> commit 2—>commit 3—>commit 4
二、具体操作
1、在commit 3时切出新分支b2,使用git log
查看分支b2的提交历史和master的提交历史一致:
2、此时,在b2分支中回滚到commit 1,在文件管理器中进入到工程的根目录中,拷贝出除.git目录外的所有文件,放到桌面上。
3、切回到master分支,删除除.git外的所有文件,并把上一步中拷贝出的所有文件拷贝回工程的根目录中,此时正常提交即可。
4、使用git log
查看master的提交历史如下:
但是此时,commit 4下所有的文件内容均和commit 1下所有的文件内容一致,也即达到了本文开头处的目标。
达到目标后,删除分支b2即可。
注意:
- 第2步和第3步是整个操作的关键。
- 在master分支上并没有真正的执行回滚,只是达到了类似回滚的效果,但是在分支b2上执行了真正的回滚。
- 本文中介绍的方法为git的非正常使用方法,请谨慎使用。