2016-11-28 190 views
0

正如我最近試圖將我的提交推送到github,我得到了與question相同的錯誤信息。我從存儲庫中刪除了這些文件,但現在必須清理歷史記錄。正如我在回答中所建議的那樣,我研究了BFG,這似乎是解決方案。在閱讀instructions時,它首先使用git --mirror link-to-remote-repo用BFG清理git歷史

現在我想知道,因爲我無法推送最新的提交,可能我的本地提交歷史比github上的更長。此外,我不確定,因爲我所做的所有工作都在分支上,而不是在主數據庫上,以及它如何影響我的存儲庫。

+0

什麼是一個問題嗎? – Ivan

+0

我不明白的是,爲了使用BFG,我應該執行遠程存儲庫的裸副本('--mirror')。但這並不是最新的。那麼這是如何工作的?我清理了遠程鏡像的歷史記錄,但在我上次推送到github後所做的提交中,仍存在有關該文件留在本地存儲庫中的「一些歷史記錄」。 – fukurai

+0

好的。如果您沒有大量更改(提交),則可以手動執行此操作: 檢查基礎提交上的新分支;對於每個提交(來自有問題的分支) - 1)使用命令'git cherry-pick --no-commit'; 2)從索引中刪除有問題的二進制文件(如果存在); 3)commit – Ivan

回答

0

手動解決方案(基於cheery pick

編輯:在開始之前,請提交或藏匿當地的變化。

比方說,我們有兩個分支masterdev具有共同與SHA1 = X.分公司提交dev包含提交A1,A2,...,A16

  • git checkout dev
  • git checkout -b new-dev
  • git reset --hard X

對於dev(A1,...,A16)中的每個提交:

  • git cherry-pick A1 --no-commit
  • 檢查你的索引與git status
  • 從指數git reset HEAD myfolder/mybinary.rpm
  • 刪除你的問題的二進制文件,刪除文件git rm myfolder/mybinary.rpm
+0

所以只是爲了理解, 1.我創建一個新分支'new-dev'並執行'git reset --hard X'這會丟棄'new-dev'中任何被跟蹤文件的所有更改。 2.我使用'git cherry-pick'完成'dev'中的提交以刪除文件。 現在我在我最後一次提交。我先用'new-dev'然後用'master'合併?如何讓我的存儲庫恢復到最新的提交狀態,只是沒有錯誤的文件? – fukurai

+0

完成所有步驟後,您將具有與分支「dev」相同歷史的新分支'new-dev'減去「壞」二進制文件。你應該在'new-dev'中看到與'dev'中相同的數字提交,並且具有相同的註釋。所以現在你應該把'new-dev'合併到'master'中。後來,當你確定所有的都是正確的時候,你可以刪除'dev'分支。 – Ivan

+0

我明白了。但是,我在'new-dev'上'git cherry-pick',而不是'dev',或者? – fukurai