2015-02-24 113 views
0

我想在git存储库中折叠一些丑陋的合并,而不必重新设置自从发生的所有提交。例如:不通过所有提交重写git回购历史记录

* sha0      * 
| ... ~50 commits   | ... ~50 commits 
*       * 
* sha1    -->  * sha1 
|\       * sha2 
* *       * 
* |\       ... 
|/ * 
* | 
*/
|/
|/ 
* sha2 
* 
... 

要做到这一点,最好的方法是什么?

编辑:

  • 我想重写SHA1和SHA2之间的历史
  • 我需要:

    中,我意识到,我要澄清的答复一个尝试的建议后,保留sha0和sha1之间的提交

+0

只是为了澄清,时间流向哪个方向?孩子们在你的ASCII图形的顶部还是底部? – Jubobs 2015-02-24 19:26:05

+0

最新到最旧的从上到下。 – 2015-02-24 21:30:08

回答

1

最终,您将最终重新投标。一个简单的方法可能是创建临时分支sha1,然后是soft reset,然后重新绑定。

git checkout -b temp_branch sha1 

git reset --soft sha2 

git commit -m <message> 

git checkout master 

git rebase --onto temp_branch sha1 

git branch -d temp_branch 
+0

'reset --onto sha2'包含1和2之间的提交还是只是将其中一个移动到另一个? – 2015-02-24 21:36:58

+0

git reset --soft sha2会将头部移动到sha2,并将所有更改保留在您可以提交的暂存区域中。 – pratZ 2015-02-25 04:07:14

+0

我刚刚试过这个,你仍然需要通过前50次提交中的rebase。 – 2015-02-26 00:50:58