如果我理解正确,您的主分支如下所示:
master: 1 -> 2 -> 3 -> .. -> 20000 -> A (First non migrated commit) -> B -> C -> ..
你想去:
master: 1' (All your migrated commits) -> A' -> B' -> C' -> ..
我认为您可以遵循使用git rebase HEAD~26000 (first commit hash probably easier)
和更改pick
为的方法squash
,但这可能很繁琐/耗时。
一个可能可行的解决方案是使用第一个 20000 的内容创建一个新提交。可能值得在备份分支上进行测试。
git checkout <last migrated commit hash> -b backup-master
backup-master: 1 -> 2 -> 3 -> .. -> [20000] -> A (First non migrated commit) -> B -> C -> ..
^- you are here.
git reset --soft <first migrated commit hash>
backup-master: [1] -> 2 -> 3 -> .. -> 20000 -> A (First non migrated commit) -> B -> C -> ..
^- you are here ^- the working directory tree/index reflects this commit
修改您的初始提交内容/消息(或者如果您愿意,可以创建一个新的提交)。
git commit --amend
现在backup-master
应该包含压缩的迁移提交,让我们移动新的提交。
git checkout master
git checkout -b master-rebase
(以防万一我们搞砸了)。
git rebase backup-master
- 我相信这会起作用,因为 git 知道成功变基所需的合并。如果这可行,您应该完成,master-rebase
将包含您想要的结果。
如果这失败了,你可能会获得更好的成功rebase --onto.
git rebase --onto <destination commit> <parent of first desired commit> <last desired commit>
即
git rebase --onto backup-master <A>~1
大师`
如果这可行,它会将您置于当前不在任何分支上的提交上,因此您需要创建一个:
git checkout -b rebase-success
.
可以在这里找到关于 rebase --onto 的更全面的解释。