2015-02-24 15 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

相關問題