【问题标题】:Git push fails to push to origin - no such refGit push 无法推送到原点 - 没有这样的参考
【发布时间】:2013-02-07 17:05:01
【问题描述】:

我在将使用git-flow 创建的hotfix 分支上的提交推送到远程存储库时遇到问题。

这是错误:

$ git push origin hotfix/MyHotfix
Counting objects:
... etc
To {my remote repo}
 ! [remote rejected] hotfix/MyHotfix -> hotfix/MyHotfix (no such ref)
error: failed to push some refs to {my remote repo}

我使用标准语法创建了hotfix

git flow hotfix start MyHotfix

这个分支已经存在于origin,我可以通过git branch -a 看到。 我还检查了远程服务器上是否仍然存在该分支,因为它在我运行 git remote show origin 时出现。

之前有没有人遇到过gitgit-flow 并找到解决方案?

注意 - 我尝试过的事情:

  • 重新克隆远程仓库 -> 相同的错误
  • 删除本地分支->同样的错误
  • 删除远程分支 -> 我可以推送“新”分支,但是当我的同事尝试推送提交时(在 git remote prune origin 之后),在本地 repo 上得到相同的错误
  • 强制推送 -> 相同的错误
  • 上游推送->同样的错误
  • 检查 refs -> 我的提交父 ID 与服务器匹配

更新:

git ls-remote origingit show-ref 显示本地和远程修补程序分支的不同 refs,但这是因为我在本地有 1 个额外提交,并且父提交的 ref 与 origin 上的 ref 匹配。

【问题讨论】:

  • 你试过git flow hotfix finish MyHotfix吗?
  • 这将关闭修补程序,但仍然无法解决能够推送完全有效分支的问题。

标签: git git-flow hotfix


【解决方案1】:

看起来这实际上是服务器存储库的问题。 在服务器上的裸仓库上运行这些步骤清除了错误:

git fsck --full
git prune
git gc

注意:根据手册页,git prune 不是必需的,因为 git gc 调用它,但我正在尝试一切。

【讨论】:

  • 优秀的反馈,比我最初的回答更准确。 +1
【解决方案2】:

考虑到issue 92,我认为修补程序分支不应该发布。
这是一个仍在等待中的功能请求。

虽然releasefeature 分支都可以发布(git flow release/feature publish),但修补程序分支不能。

因此,推送本身可能已被阻止以符合(已被拒绝的)发布操作。

【讨论】:

  • 我之前能够推送修补程序分支(因为它在原点上可见)并且我还测试了git flow hotfix publish Test,它有效。我认为问题 92 实际上应该关闭(并且有一个相关的拉取请求已关闭)
  • @Laurence 那么这个分支一定已经在origin 被删除了:git push -u origin hotfix/MyHotfix:hotfix/MyHotfix 返回什么?
  • 该命令给出了同样的错误。我想知道origin 和我的机器上的分支名称ref 映射之间是否存在不匹配。有没有办法检查这个?
  • @Laurence git fetch 后跟 git branch -a 将为您提供远程分支(以及本地分支)的名称。
  • 感谢@VonC,但我知道分支存在于遥控器上,它显示为git fetch && git branch -agit remote show origin
猜你喜欢
  • 2012-06-21
  • 2013-05-01
  • 2015-12-24
  • 2023-03-26
  • 2014-10-19
  • 2020-03-04
  • 1970-01-01
  • 2020-03-17
  • 2014-07-29
相关资源
最近更新 更多