场景
开发项目的过程中, 在特殊的大环境下, 因为项目涉及到一些敏感的信息, 项目方提出了需求, 需要将现有的项目暂时修改, 以适应当下的政策, 但是过了这段时间还需要恢复, 同时未恢复的这段时间, 我们也实现了很多新的需求. 如上图, 紫色块是为了适应政策调整的, 也就是以后恢复的时候要舍弃的部分. 而白色块下方的黄色块就是我备份的, 而等项目要恢复以后我们真的要需要的就是整个黄色块的流程.
解决方法
在备份的基础上, 将所有后提交的黄色块对应的 commit 给合并过来, 而我们强大的 Git, 也有相应的命令可以处理. 即
- // base 分支名称
- // from 待合并片段的起始 commitId(不包含)
- // to 待合并片段的结束 commitId(包含)
- Git rebase --onto base from to
操作步骤
1. 当前工作空间 --- 分支 A
2. 从当前工作的分支新建一个分支, 并且换到该分支 ----Git checkout -b newbranch
3.Git rebase --onto B 开始的 commitId 结束的 commitId
4. 生成一个基于 B 分支和选择的提交区间的片段生成一个新的分支 (detached Head)
5. 从当前工作空间新建切换到一个新的分支 ---Git checkout -b branch_bank
6. 分支 branch_bank 的代码就是我们所需要的了
7.branch_bank 强制覆盖 A 分支, 切换到 A 分支,---Git reset --hard origin branch_bank
8. 代码就恢复正常啦
### 感慨 每次用 Git 的命令解决一个新的问题, 都感觉发现了新大陆..
来源: https://juejin.im/post/5c3f294c51882525474232ea