2016-09-14 52 views
4

我在一個分支上做了一個git push -f,現在失去了其他人的工作。如何從git push -f恢復?

我可以看到我的github中顯示了其他人的工作(顯示在活動中),但沒有在遠程分支(我推送了我的更改)。不幸的是我沒有我的本地回購與遠程同步。所以我沒有其他人在我的本地代碼。有什麼方法可以讓我到當地恢復?

+1

...不要'推-f'。如果git抱怨衝突,假設它知道最好並解決衝突 –

+0

@sashoalm:沒有其他方法? –

+0

你知道丟失提交的散列嗎?提取後,此提交是否會保留在本地回購站點中? –

回答

4

別人做事情之前,請做好以下3個步驟 - 備份您的本地回購,告訴其他人來備份自己的,和備份的遠程回購,因爲他們現在的樣子。沒有什麼奇特的,只是Ctrl + C,Ctrl + V會做。在整個項目中進行,以便備份工作樹。如果你沒有直接訪問遠程服務器,git clone就足夠了,儘管我更喜歡真正的目錄拷貝。

一旦你這樣做了,其他人可以使用git push -f重新上傳他的分支。如果他有新的提交,你將不得不弄清楚他最後一次提交哪個提交,但我確信沒有實際的提交會丟失。如果其他人已經完成git pull -f,那麼即使他可以使用git reflog來恢復他的本地分支。

由於您使用的是Github,因此您可能還會看到https://stackoverflow.com/a/35273807/492336。顯然有一個Github的Events API可能很有用。

-6

我不是一個git用戶,但幾天前我來了一個交叉這篇文章,我想這個也有解決您的問題。

http://ohshitgit.com/

# undo the last commit, but leave the changes available 
git reset HEAD~ --soft 
git stash 
# move to the correct branch 
git checkout name-of-the-correct-branch 
git stash pop 
git add . # or add individual files 
git commit -m "your message here" 
# now your changes are on the correct branch 
+0

這不是解決問題的方法,而是一種撤消本地提交的方法。 – berkes

2

您可以通過REST-API

訪問GitHub的引用日誌這將顯示你的事件:

$ curl https://api.github.com/repos/<user>/<repo>/events 

你發現打破提交只是一個參考給它添加後:

POST /repos/<user>/<repo>/git/refs 
{ 
    "ref": "refs/heads/featureA", 
    "sha": "aa218f56b14c9653891f9e74264a383fa43fefbd" 
} 

或捲曲:

$ curl -i -H "Accept: application/json" -H "Content-Type: application/json" \ 
    -X POST -d '{"ref":"refs/heads/featureA", \ 
       "sha":"aa218f56b14c9653891f9e74264a383fa43fefbd"}' \ 
    https://api.github.com/repos/<user>/<repo>/git/refs