我剛剛使用--force
選項向我的項目提交了錯誤的源代碼。我該如何從一個錯誤的git push -f origin master中恢復?
是否可以恢復?據我所知,以前的所有分支機構都使用-f
選項進行覆蓋,所以我可能搞砸了以前的修訂版本。
我剛剛使用--force
選項向我的項目提交了錯誤的源代碼。我該如何從一個錯誤的git push -f origin master中恢復?
是否可以恢復?據我所知,以前的所有分支機構都使用-f
選項進行覆蓋,所以我可能搞砸了以前的修訂版本。
Git通常不會拋棄任何東西,但從中恢復可能仍然很棘手。
如果你有正確的來源,那麼你可以用--force
選項將它推入遙控器。除非你告訴它,否則Git不會刪除任何分支。如果你實際上已經失去了提交,那麼看看this useful guide to recovering commits。如果你知道你想要的提交的SHA-1,那麼你可能沒問題。
最好的事情:把所有東西都放回來,看看你的本地存儲庫中還有什麼。如果可能,請在遙控器上執行相同操作。使用git fsck
來查看是否可以收回東西,最重要的是請勿運行git gc
。
以上所有,絕不使用--force
選項,除非您真的,真的是這個意思。
我做了同樣的事情,而撤消最後一個推只有一個文件。最終返回到存儲庫的原始狀態。我使用的是Linus的git命令,因爲我在Linux上擁有本地副本。幸運的是,副本仍然完好無損。
我所做的只是(後瘋狂使得當地回購的幾個副本):
git add .
git status
(有人說,起源/主一度領先了68個提交,精...這些是所有提交我刪除了)
git remote set-url origin <GIT_SSH_URL>
git push
而且一切都恢復了之前我做強制推動的方式。 要記住的最重要的事情是不要做一個git結帳。你被強行推後。但最佳做法是禁用推送選項。我再也不會用它了。學習我的課程!
如果你知道提交哈希,很容易,只需重新創建你的分支。
5794458...b459f069 master -> master (forced update)
刪除遠程分支:
git push origin :master
然後用下面的命令重新創建分支:
git checkout 5794458
git branch master
git push origin master
該溶液已經提到here
3210如果您不是那個強制推送來源的本地倉庫,那麼在原點/主級別無法恢復。但如果你是幸運足夠使用GitHub或GitHub for Enterprise,你可以看看到REST API和找回丟失提交補丁,例如:
https://api.github.com/repos/apache/logging-log4j2/commits/889232e28f3863d2a17392c06c1dd8cac68485de
git apply patch.patch & & git commit -m「restored commit」& & git push origin master
可能重複的[有沒有辦法撤銷git push -f?](http://stackoverflow.com/questions/14476236/is-there-anyway-to-undo-git-推-F) – cmbuckley