2016-06-14 90 views
4

怎麼可能從遠程源刪除意外推送的存儲庫?恢復git remote意外推送存儲庫更改

在那裏推兩個獨立的存儲庫,其自己的歷史 例如, :

Repo1:Commit1 - Commit2 - Commit3 < --Head

Repo2:Commit1 - Commit2 < --Head

添加額外的遠程是指Repo1存儲庫Repo2後並推動所有Repo2更改遠程Repo1,Repo1開始尋找這樣的:

Repo1: Repo2Commit1 - Repo2Commit2 - --Repo1Commit1 - Repo1Commit2 - Repo1Commit3 < --Head

所以它顯示爲一個主分支,不是彼此相關的兩個獨立提交歷史序列。

此外git log不顯示所有的提交,它只顯示一個獨立序列的歷史記錄。

有沒有辦法從Repo1恢復Repo2提交。所以它看起來像以前e.g:

Repo1:Commit1 - Commit2 - Commit3 < --Head

任何想法?

How is it possible?

+0

一個分支不可能有*兩個獨立的提交歷史序列*。你用什麼命令*將所有Repo2更改推送到Repo1 *? – fracz

+0

git remote add ... git push ixi

+0

'git remote add'不會推送任何東西。我想你對兩個遠程主分支感到困惑?如果您不需要repo2遠程,請嘗試使用'git remote rm repo2'將其刪除。 – fracz

回答

0

你看到兩個獨立的序列,因爲回購是「無關」 - 不一樣的叉。

git reflog在Repo2上可能會對這種情況有所幫助。

只是將Repo2克隆到另一個目錄並在那裏運行git reflog。您將看到在存儲庫上進行的連續更改。之後,您可以將硬重置爲想要提交(reflog中的歷史記錄包含每次更改的散列)並強制將其推回到遠程Repo2。

但我不確定你想完成什麼。所以一定要對這兩個存儲庫進行備份。

+0

Repo2很好,不需要任何更改,但Repo1可以。git reflog僅顯示本地存儲庫中的更改,但問題在於遠程存儲庫Repo1具有其他無關的歷史記錄,這些歷史記錄在SourceTree中可見,但在Web上或任何git命令中都不可見。所以我們的目標是從Repo1中刪除Repo2的歷史記錄。此外,提交序列是不相關的,不相互連接。 – ixi

+0

如果您創建一個新的遠程存儲庫並嘗試將您的分支從Repo1轉入該分支,那麼該怎麼辦?它可能解決問題,似乎你只有本地的無關歷史。只要記住你只需要推送想要的分支,而不是運行'git push --all'到目前爲止,我不知道如何從歷史中刪除不相關的提交。 –