2014-09-26 167 views
1

我想從git存儲庫的整個歷史記錄中永久刪除指定的提交。我看到this thread,其中提出以下建議:從git歷史記錄中刪除提交(永遠)

git reset --hard HEAD~4 
git push origin HEAD --force 

這很好,並重置我的倉庫的狀態,但絕不做它刪除我的提交。我想從字面上回滾歷史,並放棄自4次修訂以前的回購修改。

任何人都可以幫助我嗎? 當我嘗試上述內容並查看Github中的修訂歷史時,我仍然看到不需要的提交。

我看到this article,但我想在調查此解決方案之前檢查是否有其他選項。

+0

你寫:*絕不會刪除我的提交*。您試圖擺脫的提交可能是其他引用的祖先的一部分。 – Jubobs 2014-09-26 02:06:27

+0

我應該已經清楚 - 我只處理主分支,沒有其他作者參與提交。 – jml 2014-09-26 02:07:38

+0

好的,但是從某種意義上說,這個命令*絕不會刪除[你的]提交*?你還能在'git log'的輸出中看到它們嗎?在你的遠程回購?或者你的意思是別的嗎? – Jubobs 2014-09-26 02:08:52

回答

1

從你的問題,當您運行

git push origin HEAD --force 

還不清楚,但我能想到的至少有兩個原因,它可能無法強行推masterorigin到底發生了什麼:

  1. 當前結帳的分行是而不是master並且分行已經是最新的origin
  2. 你有一個de taches HEAD

通過運行git checkout master確保master確實是當前已檢查的分支;然後運行你的強制推送命令。另外,在git push命令明確指定master

git push --force origin master 

應該這樣做。

1

如果不需要的提交不再被分支或標籤引用(即稱爲「鬆散對象」),那麼它們將被垃圾收集器自動刪除。默認情況下,GC作用於超過90天的對象。

,您仍然可以手動觸發較早GC用:

git reflog expire --expire=now --all 
git gc --prune=all 

不過,這將只作用於本地資源庫,而不是在GitHub上。 GitHub每週運行一次自己的GC選項,所以如果你想刪除提交現在,那麼你將不得不刪除存儲庫,重新創建它並在GC清理後推送你的本地。

相關問題