2016-08-01 98 views
0

我在做什麼:如何清理git歷史記錄刪除某些提交後被推送?

我完成了一項功能。

git add -A; git commit -m "feature A complete" 

然後我意識到我錯過了一些東西。

git add -A; git commit -m "feature A missed something 1" 
git add -A; git commit -m "feature A missed something 2" 
git add -A; git commit -m "feature A missed something 3" 

現在我的歷史是這樣的:

A238ad1 feature A missed something 3 
3238adX feature A missed something 2 
1238ad7 feature A missed something 1 
111AAA2 feature A complete 

我希望它看起來像這樣:

111AAA2 feature A complete 

與所有的missed something的提交合併爲feature A complete提交。

我知道git rebase -i HEAD~4是正確的路要走,但它並沒有真正刪除壞的提交清理歷史。

我注意到在其他一些文章中有一個git commit --fixup命令和一個git rebase -i --autosquash,但我沒有得到它正常工作。我相信這很容易,我今天剛出來。

+0

他們不會刪除任何內容的原因可能是您在交互式重新綁定期間未指定如何處理這些提交。你必須改變'pick',這是'squash'的默認值。通過這種方式,它將壓扁提交對方,您將有機會在最後編輯提交 –

回答

1

在這種情況下使用互動的rebase

這可以通過使用

git rebase -i 

發起其次是要包括

git rebase -i HEAD~5 

頭數,其中HEAD~5表示最近5條

然後你可以使用更多的o將你的提交壓縮成一個並編輯消息。只是代替pick選項寫squash,而不是

squash

所以在這裏你看,我改變s選項pick這是squash一個快捷方式。當我保存並關閉這個文件時,將會啓動交互式重新分配,並且我表示要進行壓縮的提交將被壓縮到21b4e04 Fixed missing bad practice。擠壓後,它會要求你輸入一個新的提交信息。輸入新消息並點擊enter即可完成。

+0

嗯。我剛剛創建了一個測試回購,測試了它,並且它工作正常,但它不適用於我的其他回購。這似乎是正確的答案,即使它不在我的其他repo中工作...:/煩人。 –

+0

有多奇怪,它是否會給出錯誤信息或任何輸出? –

+0

基本上我認爲它是因爲我已經推動它們。現在我試圖找出如何在一系列提交之間壓縮提交,因爲其他人已經在我之後提交了。即'git rebase -i origin/master〜5 origin/master〜2'。這可能嗎? –

相關問題