2016-02-12 131 views
0

我已經克隆了one of Github boilerplate project,但忘記重置原始回購的歷史,並且已經在其主分支上創建了相當數量的提交。如何在保留「最新」提交的同時壓縮大量「先前」提交?

現在我的提交歷史看起來像這樣。

初始提交 - (數百樣板提交) - (數十我提交的)

我想要做的就是「南瓜」(或「合併」如果「擠壓」在這裏不是一個適當的詞)所有來自我從克隆的原始回購的提交,同時離開我最近的歷史提交。我試圖通過使用git rebase --root -i來做到這一點,但有數百個提交來壓制(原始回購)並選擇(我自己的回購),這使得很難這樣做。

有沒有一種方便的方法來實現這一目標?我不介意在我自己的承諾開始之前,我失去了所有的歷史,或者如果我創建了一個新的回購協議。

回答

1

假設最後的「鍋爐板提交」 SHA是abc123,和你的當前分支是master,請執行下列操作:

git branch my-new-branch master 
git checkout abc123 --orphan temp-branch 
git commit -m "Initial boilerplate code" 
git rebase --onto temp-branch abc123 my-new-branch 
git branch -d temp-branch 

這將讓你與my-new-branch指向所有提交之後是鍋爐板代碼的單個壁球提交。你可以推動這個分支到一個新的回購,或者(如果這是一個本地唯一回購,或者你不介意做推力)去除master並將my-new-branch更名爲master,或其他。

+0

不好意思打擾你,但你能解釋一下'--orphan'和'--onto'在這種情況下做什麼嗎? –

+1

不用麻煩! '--orphan'創建一個沒有父節點的分支,索引的內容匹配'abc123'。 'rebase --onto'「移動」'my-new-branch'可達到的所有提交,但'abc123'無法到達'temp-branch',以及移動'my-new-branch'指針本身。 –

1

爲了做一個git壁球遵循這些步驟:

// X is the number of commits you wish to squash 
git rebase -i HEAD~X 

一旦壁球你的提交 - 選擇s爲壁球=將所有提交合併成一個單一的提交。

選擇挑選作爲最新的提交以保存它。

enter image description here

相關問題