【问题标题】:git push rejected: error: failed to push some refsgit push 被拒绝:错误:未能推送一些参考
【发布时间】:2012-04-07 14:36:23
【问题描述】:

我知道有人问过类似的问题,但我相信他们问题的原因是不同的。我做了一个硬重置,因为我把我的代码搞砸了

 git reset --hard 41651df8fc9

我做了很多更改,我做了一些提交,现在我试图将所有这些提交推送到服务器中,我收到以下错误:

 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'git@git.somewhere.git'

Git 建议执行 git pull,这也是其他人向其他用户建议的。但是,我相信 git pull 会将我当前的代码与我不再想要的代码合并(头部修订)。 如何进行推送而忘记我面前的版本/修订?

【问题讨论】:

    标签: git git-push git-pull


    【解决方案1】:

    git push -f 如果你有权限,但这会搞砸从该回购中提取的任何其他人,所以要小心。

    如果这被拒绝,并且您可以访问服务器,如下 canzar 所述,您可以在服务器上允许此操作

    git config receive.denyNonFastForwards false
    

    【讨论】:

    • 我想我没有权限 'remote: error: denied non-fast-forward refs/heads/master (you should first pull)' 我是唯一一个在这个 repo 上工作的人此刻,所以我不担心任何其他分支或任何事情。有什么想法吗?
    • 如果您是唯一拥有此 repo 的人,只需使用git push -f,它将使用您当前的 repo 替换远程 repo。如果是多用户开发,快进是必不可少的,否则很容易产生反感。
    • 如果您可以远程登录,您可以直接进入裸 git repo 并手动回退分支,例如 git branch -f,例如 git branch -f rewind_the_one_I_broke 8120307。您可以在裸仓库中运行 git log 以找到重置点。请注意,这与 git push -f 具有相同的效果,但会绕过钩子。
    • 如果您有权访问裸存储库,您可以使用git config receive.denyNonFastForwards false 临时更新您的存储库配置。我发现我的默认设置为true
    • @canzar 我的一些git push --force 命令需要git config receive.denyNonFastForwards false 才能工作。感谢您的参考。
    【解决方案2】:

    如果您是该项目的唯一工作人员,您可以做的是:

     git checkout master
     git push origin +HEAD
    

    这会将 origin/master 的提示设置为与 master 相同的提交(因此删除 41651df 和 origin/master 之间的提交

    【讨论】:

    • 这会摆脱我不再需要的代码并保留我的新代码吗? (对不起,如果这是一个愚蠢的答案)
    • 这会将 origin/master 的提示设置为与 master 相同的提交(因此删除 41651df 和 origin/master 之间的提交)
    • 使用当前 HEAD 所在的分支更新原始存储库的主分支,允许非快进更新。所以,这与git push HEAD -f 相同。对我来说,我认为,您可以使用更温和的方式来执行此操作,首先使用git fetch,然后使用git rebase -i origin/master,这会让您选择提交。
    • 啊哈哈哈哈。应该在运行命令之前阅读评论。
    【解决方案3】:

    'remote: error: denied non-fast-forward refs/heads/master(你应该 先拉)'

    该消息表明服务器上有一个拒绝快进推送的钩子。是的,通常不推荐它并且是一个很好的守卫,但是由于您是唯一使用它的人并且您想要进行强制推送,请联系 repo 的管理员以允许通过暂时删除来进行非快进推送挂钩或在挂钩中授予您这样做的权限。

    【讨论】:

    • 或者,让管理员运行git branch -f,具有相同的效果,但不需要对预接收挂钩大惊小怪。
    【解决方案4】:

    做事

    git pull origin [branch]
    

    然后你应该可以推了。

    如果你自己有提交但还没有推送到分支,试试

    git pull --rebase origin [branch]
    

    然后你应该可以推了。

    阅读更多关于handling branches with Git的信息。

    【讨论】:

    • 致命:找不到远程参考 [分支]
    【解决方案5】:

    我解决问题的方法是:

    git pull origin [branch]
    git push origin [branch]
    

    另外,通过运行确保您指向正确的分支:

    git remote set-url origin [url]
    

    【讨论】:

      【解决方案6】:

      我执行了以下步骤来解决此问题。在给我错误的分支上:

      1. git pull origin [branch-name]<current branch>
      2. 拉取后,遇到了一些合并问题,解决了它们,将更改推送到同一个分支。
      3. 使用推送的分支创建了拉取请求... tada,我的所有更改都在反映。

      【讨论】:

        【解决方案7】:

        对我来说,以下工作,只是一个接一个地运行这些命令

        git pull -r origin master

        git push -f origin your_branch

        【讨论】:

        • 这解决了我的问题。我遇到的主要问题是我手动更改了默认分支名称,然后事情开始分崩离析。这些命令解决了我的问题。谢谢!
        猜你喜欢
        • 2021-08-07
        • 1970-01-01
        • 2022-01-25
        • 2021-03-07
        • 2012-08-16
        • 2021-03-26
        • 2017-12-07
        • 1970-01-01
        相关资源
        最近更新 更多