我在一个分支上做了一个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:没有其他方法? –
你知道丢失提交的散列吗?提取后,此提交是否会保留在本地回购站点中? –