已删除远程上的分支,现在无法将其从本地推回到远程

  • 本文关键字:删除 分支 git gitlab git-remote
  • 更新时间 :
  • 英文 :


所以本质上我做了一堆意外的提交,这些提交被推送到了我的远程分支。我想把它们从历史中删除,所以我使用了命令:

git push my-branch :master
git reset --hard [COMMIT HASH]

这删除了我在远程分支上的分支,但将其保留在本地,头部设置为我想要的提交。

现在,当我尝试使用命令时

git push my-branch master

我有两个错误(不确定它们是否相关(第一个是commiter的电子邮件没有遵循此模式,第二个是远程拒绝了我的分支->我的分支(接收前挂钩被拒绝(

错误列表中的committer的电子邮件不是我的电子邮件(提交人(,当我检查提交详细信息时,它会说我是作者,并列出我的电子邮件,所以我不确定它在哪里看到这封其他电子邮件。我已经尝试过设置全局配置用户名和电子邮件并进行修改,但没有任何变化。

至于第二个错误,Master是一个受保护的分支,但到目前为止,我一直在推拉这个分支。

首先,正如@torek所指出的,git-push的第一个参数应该是remote(通常是origin(。您可以将远程视为服务器的昵称(通常在运行git clone <URL>时,它会将origin设置为<URL>的"昵称"(。对于git push,第一个参数告诉git要推送到哪个服务器。因此,git push my-branch :master实际上是告诉git删除my-branch服务器上的master分支。

由于您不太可能设置my-branch远程,我假设发生了以下两件事之一:

  1. 您已将origin误认为分支名称,并运行了git push origin :master。这将删除服务器上的master。当时,master一定不是受保护的分支,否则会产生错误。据推测,在您完成此操作后,有人在服务器上重新创建了master,这一次立即将master指定为受保护的分支。如果发生了这种情况,您可能需要向您的团队道歉。在用提交人的电子邮件(如下(解决了这些问题后,您可能仍然有一些问题需要解决,但您的问题中没有足够的信息来帮助解决这些问题
  2. 这是你写问题时犯的一个错误,你实际运行的是git push origin :my-branch,然后是git push origin my-branch

现在,关于你得到的错误:

remote拒绝了我的分支->我的分支机构(预接收挂钩被拒绝(

这表示您没有遇到的服务器施加了一些限制。

commiter的电子邮件没有遵循此模式。

这是服务器发出的自定义错误消息,用于解释您未满足的限制。

当我检查提交详细信息时,它会说我是作者,并列出我的电子邮件

Git提交有单独的提交人和作者信息。使用git show --format=fuller可以同时看到

这允许人们创建和推送其他人的提交,而无需为工作承担责任。这在开源存储库中尤其有用,在这些存储库中,在满足某些标准之前,您可能不会获得提交/推送访问权限(例如,在LLVM上,您需要贡献至少3次提交才能获得提交访问权限(。

另一种有用的方法是当您编辑、重定基准或挑选提交时。作者和作者日期将保持不变,以反映谁最初做出了这一更改以及何时做出,但提交人和提交日期将更新,以反映是您做出了编辑/精心挑选/重新调整的版本。

错误消息可能告诉您它需要COMMITTER电子邮件来匹配模式,而不是AUTHOR。假设有问题的提交和my-branch之间没有任何合并提交,您应该能够通过执行git rebase --force-rebase <problem commit>~1将提交者电子邮件更新到您的电子邮件

最新更新