此问题在此处已有答案:
Squashing first few dozens of git commits that contain merge commits(2个答案)
3天前关闭。
如果我有以下病史
A-B-C-D-E-F-G
A是根提交,我想压缩A-D,但保持E不变,我发现了一种方法,只需两步即可完成
git rebase --onto A C
那么它就变成了
A-D'-E-F-G
然后我做一个
git rebase -i --root
在vim中我交互地设置D'为s
,然后我就可以得到我想要的
A'-E-F-G
其中A'
具有从A-B-C-D的所有变化,而E
仍然是原始的E
(其差异没有改变)
我可以用更简单的方法来做上面的事情吗?可以在一个git命令中使用一些神奇的--onto
命令吗?(非交互式)因为在真实的的例子中,我有几百个提交,而不仅仅是A-B-C-D。
2条答案
按热度按时间3yhwsihp1#
我不久前得到了这个答案(比如几周前?)。可以这样做:
这里就是了,还有其他的重置方法,但我认为这已经足够简单了。
更新:如果D后面的历史很复杂,最好在最后一步运行一个rebase:
*如果历史很复杂并且 * 它包括有冲突的合并,我可以提供 this 脚本来处理最后一步,以避免必须重做有冲突的合并:
https://github.com/eantoranz/git-replay
oxcyiej72#
假设你写的所有东西都能按原样工作,你能在命令A之前使用commit吗?
X-A-B-C-D-E-F-G
根据你的说法
git rebase --onto X C
应该给予你
X-D'-E-F-G