在我进一步说明之前,让我解释一下为什么我们不能做a:
git checkout -b <branch> <sha>
基本上,这个分支(我们称之为dev1)在另一个开发者的机器上。他进行了一些提交并将它们推送了上去。这个分支是从另一个分支(我们可以称之为Features)中分支出来的,该分支正在被重命名为development。 development作为Features的一个分支创建,然后删除了features分支。 然后,另一个开发人员在本地和远程都删除了开发者的分支(dev1)。当使用Github for Windows时,他发现所有分支都要求被推送,所以他删除了整个文件夹(跳过了回收站),并重新克隆了仓库。 因此,现在他无法执行以下操作:
git reflog
因为它没有任何历史记录,所以我无法看到他的提交,因为它们从未被拉取到我的本地机器上。
所以,考虑到这一点,有没有一种远程恢复他的dev1分支的方法? 我一直在寻找一个命令,可以显示所有已删除的远程分支,但到目前为止,我还没有找到这样的命令。
任何帮助都将避免数周的开发工作!
git fsck
以查找所有悬空对象,并在其中查找提交对象。git cat-file -t <object-sha1>
可以列出对象类型。逐个运行git show
来检查这些悬空提交。我认为你可以找到哪个提交是dev1的tip。如果找到了,运行git branch dev1 <sha1>
来恢复它,然后将dev1
推回去。 - ElpieKaygit fsck
时,根本没有返回任何东西。 - r3plicadevelopment
。另一种可能是悬空对象被git gc
清理了。如果是第一种情况,您可以在development
的历史记录中找到它。如果是第二种情况,也许只有文件恢复工具才能帮助您。 - ElpieKaygit gc
清除它们之前仍然存在,如果它们从任何分支、标签或reflog中不可访问。如果没有备份就删除存储库,则提交(提交对象、树对象、作为文件的blob对象)将丢失。不进行备份是一个大问题。 - ElpieKay