如何使用git重新定义这些复杂的合并提交

时间:2013-01-29 11:23:49

标签: git branching-and-merging rebase

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

*   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

我想要这样的东西(用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,从源代码库复制文件并进行提交。

1 个答案:

答案 0 :(得分:0)

如果你重新绑定,你用rebase解决所有的合并冲突..所以你不需要单独的merge-commits ..所以首先 - 恢复你所有的merge-commits然后尝试以下:

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

将rebase 8放在rebase 7之上:

git rebase c277df7 d16e5ca

然后将9放在8:

git rebase d16e5ca c81227f 

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

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

祝你好运

编辑:如果你不想丢失“merge-commits”那么你可以通过做rebase d16e5ca 36cd4ff(当然是第一次rebase之后)在commit 8之上重新整理“merge-commit-branch”< / p>