【问题标题】:Git push failed, "Non-fast forward updates were rejected"Git 推送失败,“非快进更新被拒绝”
【发布时间】:2011-10-17 09:02:48
【问题描述】:

我已经通过 Git Online 编辑了我的 GIT 存储库。尝试推送本地代码更改后,出现错误:

Git push failed, To prevent from losing history, non-fast forward updates were rejected.

我该如何解决这个问题?

【问题讨论】:

标签: git github push


【解决方案1】:

先拉取更改:

git pull origin branch_name

【讨论】:

  • 如果这不能解决您的问题,请确保您推送到与您当前正在处理的分支相同的分支。使用“git status”检查您所在的分支。
  • 这个命令对我有用,但我想知道,为什么这不起作用:git pull?遥控器等于origin,所以它实际运行的是:git pull origin。它不应该更新所有分支吗?
【解决方案2】:

如果您确定要推送,请将 --force 添加到您的命令行。例如。使用git push origin --force(我推荐使用命令行,因为您会发现其他用户通过命令行获得更多支持。SmartGit 也可能无法做到这一点。)有关更多信息,请参阅此站点:http://help.github.com/remotes/

【讨论】:

  • --force 会解决你的问题,但可能会伤害他人。它应该只在非常小心(和知识)的情况下使用
  • -1 因为强制推送一般来说是个糟糕的主意。
  • +1 因为有 5 人同意 @joshin4colours 给出 -1。但是,虽然强制推送并不总是最好的主意(git 通过拒绝你的推送很清楚地表明了这一点),如果 100% 的时候这是一个坏主意,那么这个选项就不会存在。马特在这里的建议肯定对其他人有用。
  • 如果您是唯一使用该分支的人,请随意使用 --force。但是,与其他开发人员共享分支时确实会导致问题。
【解决方案3】:

在推送之前,使用 rebase 选项执行 git pull。这将获取您在线(在您的源中)所做的更改并在本地应用它们,然后在其上添加您的本地更改。

git pull --rebase

现在,你可以推送到远程

git push 

如需了解更多信息,请查看Git rebase explainedChapter 3.6 Git Branching - Rebasing

【讨论】:

  • 在我的情况下 git pull --rebaseThere is no tracking information for the current branch. Please specify which branch you want to rebase against. 结束
【解决方案4】:

我遇到了同样的错误,只需在命令中添加“--force”,就可以了

git push origin master --force

【讨论】:

  • 这有什么后果吗?
  • 丢失其他人的提交。
  • 我遇到了一个奇怪的情况,这正是我想要做的......用新的东西吹走刚刚创建的远程主分支的内容。这解决了我的问题。虽然它不是适合所有人的解决方案,但 --force 可能会有所帮助。
  • 我认为这个答案不应该被否决 6 次。这是对所提供问题的有效解决方案,但是,对于该命令有用的情况,作者可能会更具描述性。如果值得一提,因为它值得写(--force 的功能)
【解决方案5】:

您可以在命令中添加--force-with-lease,它会起作用。

git push --force-with-lease

--force 具有破坏性,因为它无条件地用您在本地拥有的任何内容覆盖远程存储库。但是--force-with-lease 确保你不会覆盖其他人的工作。

查看更多信息here

【讨论】:

    【解决方案6】:

    我也遇到了同样的问题。
    原因是,我的本地分支不知何故丢失了对远程对应的跟踪。

    之后

    git branch branch_name --set-upstream-to=origin/branch_name
    git pull
    

    并解决了合并冲突,我能够推动。

    【讨论】:

    • 您好像错过了远程分支中的更改
    【解决方案7】:

    (一个)Netbeans 7.1 的解决方案:尝试拉动。这也可能会失败。现在查看日志(它们现在通常显示在 IDE 中)。有一行/多行说:

    “由于这个文件,拉取失败:”

    搜索该文件,将其删除(之前进行备份)。通常它是一个 .gitignore 文件,所以你不会删除代码。重做推动。现在一切都应该正常了。

    【讨论】:

      【解决方案8】:

      使用--rebase 选项对我有用。

      • git pull <remote> <branch> --rebase

      然后推送到仓库。

      • git push <remote> <branch>

      例如

      git pull origin master --rebase

      git push origin master

      【讨论】:

        【解决方案9】:

        我也遇到过同样的问题。 我解决了

        git checkout <name branch>
        git pull origin <name branch>
        git push origin <name branch>
        

        【讨论】:

        • OP 说要推送本地代码更改。 checkout 将覆盖这些更改,或者至少不会将它们包含在推送中。
        【解决方案10】:

        这对我有用。可以在 git 文档中找到here

        如果你在你想要的分支上,你可以这样做:

        git fetch origin
        # Fetches updates made to an online repository
        git merge origin YOUR_BRANCH_NAME
        # Merges updates made online with your local work
        

        【讨论】:

          【解决方案11】:

          遇到同样的问题,要解决它,运行以下git 命令。

          • git pull {url} --rebase
          • git push --set-upstream {url} master

          您必须先在 github 上创建存储库。

          【讨论】:

            【解决方案12】:

            有时,当你从你的 git 中提取数据时,HEAD 会分离。您可以通过输入命令来检查这一点:

            git branch 
            
            • (HEAD 与 8790704 分离)

              主人

              开发

            最好搬到你的分支并从你各自的分支中重新拉动。

            git checkout develop
            
            git pull origin develop
            
            git push origin develop
            

            【讨论】:

              猜你喜欢
              • 2013-10-17
              • 2013-12-26
              • 2011-06-08
              • 2015-01-28
              • 2014-06-04
              • 2012-08-27
              • 2019-05-31
              • 1970-01-01
              • 2017-03-01
              相关资源
              最近更新 更多