2016-01-22 42 views
1

今天發生在我們身上的一件令人尷尬的事情發生在一個新的合作伙伴已經提交了一個提交&推送並覆蓋了存儲庫中的所有內容。使用之前的提交覆蓋所有存儲庫

現在我需要回到災難發生前的地步。

您可以刪除對遠程存儲庫的提交嗎?

如果沒有,因爲我可以把一個提交(例如: 0231c10)作爲主分支的頭?

+0

Literaly你有一個很大的問題現在。我想提出以下解決方案。如果你還沒有推出或從「災難」回購中獲取/取消。你/一些處於良好的狀態,仍然擁有「正確的」儲存庫。因此,您可以完全刪除遠程設備,創建一個新的空白回購站,並將正確的回購站推送到新的遠程站點。 – ckruczek

+0

[將Git回購恢復到之前的提交]可能的副本(http://stackoverflow.com/questions/4114095/revert-git-repo-to-a-previous-commit) – Ferrybig

+0

如果在該遠程存儲庫中啓用強制推送,那麼檢查push不是'push -f'可能會更好。 –

回答

0

您可以使用git reset --hard 0231c10,而您在master分支。

0

如果使用一個新提交覆蓋存儲庫,那麼最好使用命令git revert <hash>恢復它。隨着恢復將被創建新的提交,它將恢復在提交<hash>中所做的更改。

使用這種方法,你仍然會在歷史上犯下錯誤,但如果你沒有足夠的經驗,這是解決這樣的問題,只是因爲它很容易最好的辦法,否則與像git reset --hard 0231c10您需要的方法使用強制推送選項,這不是非常安全的行爲,即使你已經準備好承擔這種風險,你需要知道你需要讓所有提交者對他們的環境不採取非常安全的行動,比如git fetch origin,然後在主分支git reset --hard origin/master

但是,如果您認爲自己已經準備好在存儲庫中重寫歷史記錄,那麼可以使用git reset --hard 0231c10,正如在另一個答案中提出的那樣。

0

通常,在已發佈的回購協議中,執行git revert然後git push會更安全。還有其他的解決方案也

  1. 沒有做任何更改您的本地回購,你也可以這樣做git push -f origin 0231c10:master

  2. git reset --hard <revision_id_of_last_known_good_commit>git push --force

相關問題