首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >修改Git对共享回购的承诺

问修改Git对共享回购的承诺
EN

Stack Overflow用户
提问于 2009-04-30 20:26:52
回答 5查看 2.7K关注 0票数 5

我有一个本地的git repo,我最近提交了一个,然后推送到一个共享repo。只有在我把它推到共享回收站后,我才意识到我犯了一个丑陋的错误。我在本地修改了它,在我修复了我的源码后没有问题:

代码语言:javascript
复制
git commit -C HEAD -a --amend

在那之后,我尝试了另一个git推送来源,我得到了以下错误:

代码语言:javascript
复制
! [rejected]        mybranch -> mybranch (non-fast forward)

纠正这种情况的最好方法是什么?

EN

回答 5

Stack Overflow用户

发布于 2009-04-30 20:41:34

git (默认情况下)不允许您将任何“倒回”分支提示的内容推送到分支。换句话说,如果当前分支头部不是分支尖端的直接父代或祖先,则推送将被拒绝。

你可以通过使用git push的-f选项或者使用带有前导'+‘的refspec来尝试推送,例如git push origin +mybranch:mybranch。

通常,远程存储库仍然不会允许这种情况发生,因为如果不同的人可以不加区别地推送不包括本地没有的提交的分支提示,您将面临丢失提交的风险。

您可以通过更改远程存储库上的配置参数receive.denyNonFastForwards来覆盖此行为(假设您拥有对远程存储库的适当访问权限)。

如果您没有这样的访问权限,则可以通过删除远程分支并重新创建它来实现此目的。

例如:

代码语言:javascript
复制
git push origin :mybranch
git push origin mybranch

请注意,较新版本的git包含一个配置参数receive.denyDeletes,如果设置该参数,将阻止此潜在危险的变通方法工作。

票数 7
EN

Stack Overflow用户

发布于 2009-04-30 20:41:56

如果你想强行推送,你可以...嗯..。将--force传递给push。

然而,在公共存储库上重写历史通常被认为是不好的形式。

票数 5
EN

Stack Overflow用户

发布于 2009-04-30 20:54:35

在这种情况下,最好是使用修复程序进行第二次提交。由于您已经在本地存储库中更改了原始的第一次提交,因此您可能希望将其从共享存储库中拉出并移动HEAD,以便可以对更改后的提交进行垃圾回收。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/808877

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档