我在一個分支上做了一個git push -f
,現在失去了其他人的工作。如何從git push -f恢復?
我可以看到我的github中顯示了其他人的工作(顯示在活動中),但沒有在遠程分支(我推送了我的更改)。不幸的是我沒有我的本地回購與遠程同步。所以我沒有其他人在我的本地代碼。有什麼方法可以讓我到當地恢復?
我在一個分支上做了一個git push -f
,現在失去了其他人的工作。如何從git push -f恢復?
我可以看到我的github中顯示了其他人的工作(顯示在活動中),但沒有在遠程分支(我推送了我的更改)。不幸的是我沒有我的本地回購與遠程同步。所以我沒有其他人在我的本地代碼。有什麼方法可以讓我到當地恢復?
別人做事情之前,請做好以下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可能很有用。
我不是一個git用戶,但幾天前我來了一個交叉這篇文章,我想這個也有解決您的問題。
# 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
這不是解決問題的方法,而是一種撤消本地提交的方法。 – berkes
您可以通過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
...不要'推-f'。如果git抱怨衝突,假設它知道最好並解決衝突 –
@sashoalm:沒有其他方法? –
你知道丟失提交的散列嗎?提取後,此提交是否會保留在本地回購站點中? –