git - 如何自动化一系列复杂的 git 历史重写?
问题描述
情况
假设我想在合并之前总是变基,但很晚才注意到我忘了这样做,现在提交 E 和 C 具有相同的父级:
I (branch-1)
|\
| H (branch-2)
| |\
| | G
| |/
| F
| |\
| | E
| D |
| |\ \
| | |/
| |/|
| | C
| |/
B |
\|
A
我想这样“解开”历史:
I (branch-1)
|\
| H (branch-2)
| |\
| | G
| |/
| F
| |\
| | E
| |/
| D
| |\
| | C
| |/
B |
\|
A
我看到的唯一方法非常麻烦,并且会涉及许多连续的历史更改命令,例如git rebase --onto ...
大多数git reset --hard ...
提供的提交哈希(...
)在整个过程中只知道一半。
问题
有没有更自动化的方法来解开图表?我们可以为这样的历史重写制作一个脚本,其中我们只使用来自初始状态的信息吗?
解决方案
由于您只需要进行一组内容更改,因此这是一次提交变基:
git rebase --onto D E
但在新历史中其他所有内容都将具有相同的内容,所以在简单变基之后:
git replace E @
git filter-branch -- --all
使用您想要移动现有标签等的任何选项。 F
, G
,H
并且I
将用新的祖先但相同的内容重写,当然E
会有新的祖先和合并的D
内容。
推荐阅读
- webdatarocks - 行、列、度量中的 WebDataRocks 数据透视表标题存在问题
- javascript - 输入后如何使元素向右移动?
- sql - 按排除值的最大值分组
- node.js - 套接字:事件连接错误 io.socket.engineio.client.EngineIOException:websocket 错误
- javascript - 将值推送到数组,然后将这些数组推送到一个数组
- javascript - 获取返回先前数据的 api
- python - 如何用python“复制”GoogleSheet?
- javascript - React,循环中的 Javascript 导出函数
- python - 使用函数在 tkinter 的第二个窗口中创建一个按钮
- bash - 在bash中按日期时间格式排序