所以本质上我做了一堆意外的提交,这些提交被推送到了我的远程分支。我想把它们从历史中删除,所以我使用了命令:
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
远程,我假设发生了以下两件事之一:
- 您已将
origin
误认为分支名称,并运行了git push origin :master
。这将删除服务器上的master
。当时,master
一定不是受保护的分支,否则会产生错误。据推测,在您完成此操作后,有人在服务器上重新创建了master
,这一次立即将master指定为受保护的分支。如果发生了这种情况,您可能需要向您的团队道歉。在用提交人的电子邮件(如下(解决了这些问题后,您可能仍然有一些问题需要解决,但您的问题中没有足够的信息来帮助解决这些问题 - 这是你写问题时犯的一个错误,你实际运行的是
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
将提交者电子邮件更新到您的电子邮件