2013-03-13 258 views
3

我對git很陌生,所以一些cruft和錯誤已經累積在我的倉庫中。現在我想再次清理它。Git:從歷史記錄中刪除替換文件的提交

我的情況如下。我已將圖片添加到我的存儲庫,但分辨率太高。我稍後用較小的版本替換它們,但它們仍然存在於我的歷史中。我是唯一一個曾在該存儲庫工作過的人,因此可以容忍重寫歷史記錄的問題。我的問題是,我已經做了其他提交添加圖片和替換它們之間的提交。這可能嗎?如果是,那麼如何?

爲了說明它一點點我有:

04f9ac3 replace big pictures with small pictures 
503c2b6 make a useful commit 
8ab463d add big picutres 
3d2a5a5 initial commit 

而且想什麼,我來實現:

XXXXXXX combined commit of the "add big pictures" and "replace with small pictures" 
503c2b6 make a useful commit 
3d2a5a5 initial commit 

,我發現了很多關於「擠壓」的提交,但如果我正確理解它將「鄰居」提交結合在一起。我想要做的更多的是選擇某些提交併合併它們。我希望這對任何人都有意義。 :)

回答

3

您可以使用git rebase --interactive獲得交互式底圖,您可以在其中重新排序提交和壓縮它們。你會調用它像git rebase -i 3d2a5a5,你可能會看到類似

pick 8ab463d add big picutres 
pick 503c2b6 make a useful commit 
pick 04f9ac3 replace big pictures with small pictures 

現在,您可以編輯這個名單,所以它看起來像

pick 8ab463d add big picutres 
squash 04f9ac3 replace big pictures with small pictures 
pick 503c2b6 make a useful commit 

當您保存這個文件,然後讓底墊開始,它會添加「big picutres」提交,然後擠壓「替換」提交,並給你一個編輯器來重寫這個壓扁提交的提交信息。保存該消息後,它會在此之上添加「進行有用的提交」。

+0

謝謝你。我不知道,你可以重新排序提交,但實際上這正是我想要的。如果我會更加仔細閱讀git的消息我應該自己也想通了。:)不過有時你只需要那個指針。再次感謝您的幫助和快速回復。 – user2167634 2013-03-14 07:37:11

0

你想打壁球,你是對的。但是,你無法壓制rebase中的第一次提交。 :(

$ git log 
04f9ac3 replace big pictures with small pictures 
503c2b6 make a useful commit 
8ab463d add big picutres 
3d2a5a5 initial commit 

$ git rebase -i 3d2a5a5 <--- Choose a commit BEFORE the one you don't want 
squash 8ab463d    <--- First commit in rebase cannot be squashed :(
pick 503c2b6 
pick 04f9ac3 
相關問題