2012-09-04 38 views
3

在跳轉回答之前,請仔細閱讀此混亂!「git push --mirror」刪除了遠程標籤。任何方式來恢復他們?

問題:

  1. 我工作的一個項目(使用Git版本控制)。
  2. 我創建標籤版本2.x和它推到我的遠程起源
  3. 這個遠程原點是一個私有鏡像,在1.x系列中沒有標籤。 原因 - 我們開始在v2.x中從頭開始編碼,所以1.x只保留歷史原因。
  4. 不知道這一點,我添加了另一個遠程我們的公共github回購。
  5. 我想可以讓鏡最新的標籤,並承諾github上 -

我用(因爲我是唯一的開發者,我沒有刻意去合併!):

git push --mirror 

,並刪除所有標籤在Github的1.x系列中!

現狀:

這意味着數據存在於遠程...

什麼可能的工作:

  1. 如果我能與所有的日誌克隆GitHub庫,包括已刪除的日誌「提交「在本地,那麼我的」本地「也將刪除提交。之後,它可能是git reflog/rebase/reset練習。

  2. 我假設,因爲遠程git是一個完整的回購本身和它的showing commits by SHA1 hashes,如果我可以在「遠程」上運行git reflog/rebase/reset,可能在理論上起作用。

請注意,我正在尋找純粹的git方式。手動我們也可以下載「標籤」(拉鍊),從SVN恢復(我們的1.x中使用SVN)

請讓我知道你的意見/解決方法。

回答

1

我瞭解到硬盤的方式,在git的數據可能會丟失。

我的問題沒有答案。我不得不做一些手工作業(複製舊標籤形成老SVN檔案+下載一些壓縮版本和標記他們,等等)

所以,如果你這樣做:

  1. Intialize一個git回購本地​​,添加一些文件並將其提交。
  2. 然後改變遠程原點,然後做git push --mirror到遠程服務器

遠程回購將是你的本地回購的完整鏡像。如果遠程回購有這樣的其他克隆/備份/鏡像等無法撤消這個。

當然我所做的(不小心)是非標準的方式,所以git不負責它...

0

這裏是一個非常中肯的解決方案,撤銷git push -mirror

How to undo "git push --mirror"?

+0

我已經檢查過。它假定__「...從服務器上刪除的引用在推送後仍然在本地的遠程。」__在我的情況下不是這樣 – rahul286