2016-09-07 123 views
3

之前,我去任何进一步的,让我解释一下,为什么我们不能做:恢复远程的Git分支

git checkout -b <branch> <sha> 

基本上分支(姑且称之为DEV1)是另外一个开发人员的机器上。他已经做了一些承诺并推动了它们。该分支从另一分支(我们可以称之为特征)分支,该分支被重命名为开发开发被创建为的一个分支特征然后功能被删除。 开发者分支(dev1)然后由其他开发者在本地和远程删除。当使用github for windows时,他发现我们要求推送的所有分支,因此他删除了整个文件夹(它跳过了回收站)并重新克隆了回购站。 所以现在他不能做:

git reflog 

,因为它没有任何的历史。我看不到他的提交,因为他们从未被本地拖到我的机器上。

那么,有鉴于此,是否有办法远程恢复其分支? 我一直在寻找一个命令,显示所有被删除的远程分支,但到目前为止,一直无法找到这样的命令。

任何帮助将避免数周的开发工作!

+0

由于dev1在被删除之前被推送,因此dev1的提示提交及其父项预计存在于远程回购中,很可能是作为悬挂对象存在。创建一个新的克隆并运行'git fsck'来查找所有悬挂的对象并查找其中的提交对象。 'git cat-file -t '可以列出对象类型。运行'git show'来逐一检查这些悬而未决的提交。我想你可以找出哪个提交是dev1的提示。如果找到了,运行'git branch dev1 '恢复它,然后再推'dev1'。 – ElpieKay

+0

他做了一个克隆,当他做了一个'git fsck'时,他什么也没有返回 – r3plica

+0

我想到了两种可能性。一个是dev1的提示现在仍然被其他分支或标签引用,也许是'development'。另一个是悬挂的物体被git gc修剪。如果第一个,你可以在“发展”的历史中找到它。如果第二个,也许只有一个文件恢复工具可以帮助。 – ElpieKay

回答

1

您可以使用GitHub Events API来查看用户或回购的过去90天内发生的最后300个事件(以每页30个事件分页)。您可以在那里搜索该分支上的最后一个推送事件,从而获取需要重新实例化为分支的SHA-1。

E.g。在这里你可以看到我最近的事件:https://api.github.com/users/Vampire/eventshttps://api.github.com/users/Vampire/events?page=2,a。秒。 O操作。

或此处存储库的事件vivin/gradle-semantic-build-versioninghttps://api.github.com/repos/vivin/gradle-semantic-build-versioning/events,https://api.github.com/repos/vivin/gradle-semantic-build-versioning/events?page=2,a。秒。 O操作。

+0

听起来不错,但回购是私人的,没有创建应用程序和使用OAuth,没有出现我可以看到与回购相关的事件。 – r3plica

+0

你可以。只需使用基本身份验证(https://developer.github.com/v3/auth/)。我只是尝试了它,并且使用基本身份验证,我得到了有关我的私人要求,回购等的信息,而我却没有。 – Vampire