2

目前我有这个复杂的合并提交树:

*   36cd4ff merge commit to rebase 12 (master,origin/master,HEAD)
|\  
| *   f8d22cf merge commit to rebase 11
| |\  
| | *   4381ba4 merge commit to rebase 10
| | |\  
| | | * c81227f commit to rebase 9
| * | | d16e5ca commit to rebase 8
* | | | c277df7 good 7
* | | | e712ceb good 6
|/ / /  
* | | 80e3baa good 5
* | | 1559030 good 4
|/ /  
* | e8bf45c good 3
* | 4ca2d92 good 2
|/
* d43f5ac good 1

我想要这样的东西(用 a 重写干净的历史git push --force):

* 36cd4ff merge commit to rebase 12
* f8d22cf merge commit to rebase 11
* 4381ba4 merge commit to rebase 10
* c81227f commit to rebase 9
* d16e5ca commit to rebase 8
|
* c277df7 good 7
* e712ceb good 6
* 80e3baa good 5
* 1559030 good 4
* e8bf45c good 3
* 4ca2d92 good 2
* d43f5ac good 1

如果我执行 git rebase -i HEAD~6,只会出现这些提交:

pick 80e3baa good 5
pick e712ceb good 6
pick c277df7 good 7
pick d16e5ca commit to rebase 8
pick c81227f commit to rebase 9
pick 4381ba4 merge commit to rebase 10

这些提交去了哪里?

* f8d22cf merge commit to rebase 11
* f8d22cf merge commit to rebase 11

到目前为止,唯一有效的“解决方案”是克隆存储库并从 开始 c277df7 good 7,从源存储库复制文件并进行提交。

4

1 回答 1

0

如果你变基,你用变基解决所有的合并冲突..所以你不需要单独的合并提交..所以首先 - 恢复你所有的合并提交,然后尝试以下操作:

直到“good 7”你有一个直接的提交线,之后你必须把每个提交放在树的顶部(以 7 为基础)

将 rebase 8 放在 rebase 7 之上:

git rebase c277df7 d16e5ca

然后把 9 放在 8 上:

git rebase d16e5ca c81227f 

解决所有合并冲突(您可能需要进行其他提交或修改您的提交)

在你做任何事情之前,我建议你通过制作文件夹的副本来备份 repo(你可以使用 git reflog 倒带所有内容,但有时副本更容易)

祝你好运

编辑:如果您不想丢失“合并提交”,那么您可以通过执行 rebase d16e5ca 36cd4ff (当然是在第一次 rebase 之后)在提交 8 之上重新设置整个“merge-commit-branch”

于 2013-01-29T12:05:11.207 回答