如何从GitLab恢复已删除的远程分支

5

您好,在将develop分支合并到stage分支时,我忘记在Gitlab上勾选删除源分支选项。所以现在我有一个本地过时的develop分支,以及最后一次将其合并到develop之前合并(和删除)develop分支至stage分支的功能分支(本地)。我该如何完全恢复已删除的develop版本?


我不太确定我理解这个问题。如果你有功能分支的最新提交,那就没有什么需要恢复的了。你是在问如何将本地存储库中的提交推送到Gitlab吗? - William Pursell
这里是流程:从本地的 develop 版本创建了 feature 分支,然后我创建了 PR feature => develop 并进行了合并,接下来进行了另一个 PR develop => stage,在这里不小心将远程的 develop 分支删除了。 - Verthon
这个回答解决了你的问题吗?在Git中删除分支后,我能恢复它吗? - matt
当我尝试使用git checkout -b shanumber命令时,sha号码来自gitlab,我收到了以下错误信息:“Git通常不会创建以40个十六进制字符结尾的引用,因为当您只指定40个十六进制字符时,它将被忽略。这些引用可能是错误创建的。例如, git switch -c $br $(git rev-parse ...)其中"$br"为空,并创建了一个40个十六进制字符的引用。请检查这些引用,也许可以删除它们。通过运行“git config advice.objectNameWarning false”关闭此消息。 致命错误:名为'develop'的分支已经存在。 - Verthon
请纠正我如果我错了,但我认为如果我可以再次做同样的PR,那么就需要从featuredevelop再次提交PR并将其合并,而develop的代码应该与之前相同(在合并到stage分支之前删除develop),但是我不确定它是否会破坏历史记录或者会在将来将develop合并到stage分支时引发一些冲突? - Verthon
2个回答

3

我做了同样的事情。 我从一个Gitlab存储库中删除了别人的分支,但我没有本地副本,因此"git reflog"无法帮助我。 然后,我找到了另一个关于恢复Github已删除分支的答案Git: Recover deleted (remote) branch,它建议如果您使用了类似JIRA的东西,那么就可以链接到提交,并且链接中包含了需要在@diego-baranowski的答案中使用的提交SHA1 ID。

git checkout -b <branchname> <sha1>

在这里,“branchname”可以是您想要的任何名称,与删除的分支名称相同或是一个新名称,“sha1”是提交的长SHA1 ID。

或者,您也可以使用curl(或更好的Postman)列出GitLab服务器上的事件,并找到“deleted”事件,它也会有SHA1 ID(“提交自”值)。

curl --location --request GET 'https://gitlab.com/api/v4/events' --header 'Authorization: Bearer <your Personal Access Token here>

返回这样的JSON数据:
   {
    "id": xxxx,
    "project_id": xxxx,
    "action_name": "deleted",
    "target_id": null,
    "target_iid": null,
    "target_type": null,
    "author_id": xxxx,
    "target_title": null,
    "created_at": "2021-11-08T20:27:56.299Z",
    "author": xxxx,
    "push_data": {
        "commit_count": 0,
        "action": "removed",
        "ref_type": "branch",
        "commit_from": "<YOUR SHA1 ID IS HERE>",
        "commit_to": null,
        "ref": "<DELETED NAME HERE>",
        "commit_title": null,
        "ref_count": null
    },
    "author_username": "xxxx"
},

还可以通过菜单找到目标 sha:项目信息->活动(这将带您到 https://.../<reponame>/activity ) 然后向下滚动到您正在查找的实际提交。 - Pavel

2
使用reflog提取你所在分支的提交SHA1值,然后使用checkout命令。
git reflog
git checkout -b <branchname> <sha1> 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接