【问题标题】:rejected master -> master (non-fast-forward)拒绝主 -> 主(非快进)
【发布时间】:2012-07-26 15:11:52
【问题描述】:

我正在尝试推送我的项目(新存储库中的所有文件)。我按照这些步骤进行操作,但是当我使用 git push -u origin master 推送时出现此错误:

! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'git@github.com:asantoya/projectnewbies.git'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes (e.g. 'git pull') before pushing again.  See the
'Note about fast-forwards' section of 'git push --help' for details.

我多次遇到此错误,不知道该怎么办。

【问题讨论】:

  • 如果你确定你的本地 master 有你想要的最新的远程更改,那么执行 git push --force
  • git push --force <remote_repository> 为我工作。
  • @Sorter - 我整天都遇到同样的问题,这对我有帮助!谢谢你。但它没有解释为什么首先会出现问题以及修复工作的原因。
  • @pmr,只是轻率地询问 OP“阅读错误消息”是否根本没有帮助。显然,该错误消息对 OP 没有任何意义,就像它对我或其他 66 名支持他的帖子的人没有任何消息一样。尖酸刻薄、机智过人,根本无法帮助别人。
  • @Padawan 您还会注意到这个“狡猾、机智的人”为这个问题提供了公认的答案,并且 72 人(可能包括您)认为它很有帮助。很抱歉我的评论显得傲慢,但如果你也在专业背景下问我这个问题,那将是我的第一个问题。有时停下来花一分钟仔细阅读错误消息有时会产生奇迹。当我第一次看到这个错误时,我为我做了。

标签: git push


【解决方案1】:

我的遥控器与本地不同步,所以这对我有用

git pull --rebase

并确保当您再次执行git pull 时,它应该显示Already up to date 现在你已经准备好推送到原点了

假设你已经有git remote add origin remote repository URL

git push origin master

截图说明了一切

您也可以这样做

  1. git stash(临时存储未提交的工作)
  2. git pull(使本地和远程同步)
  3. git stash pop(取回未提交的更改)
  4. git 推送

【讨论】:

    【解决方案2】:

    我也遇到了同样的错误,但我通过获取它的 URL 轻松解决了它 作为

    git fetch origin Your repository origin
    

    然后简单地应用命令

    git push -f origin master
    

    你会得到一个好的结果

    【讨论】:

      【解决方案3】:

      注意:这绝不是 git 的推荐用法。这将覆盖遥控器上的更改。仅当您 100% 知道应将本地更改推送到远程主机时,才执行此操作。

      ⚠️试试这个:git push -f origin master

      【讨论】:

      • 不,不要尝试这个。来自git help push:“这可能会导致远程存储库丢失提交;请谨慎使用。”
      • 绝对不要这样做
      • 这对我有用。我认为这没关系,因为我在 github 上的唯一提交是使用新仓库创建的提交。在项目开始后不要使用它可能是个好主意。
      • 如果您想更新为交付目的而创建的存储库(因此远程端没有新更改),这可能会很有用
      • 我只是使用它,因为我刚刚提交,与 GitHub 同步,然后希望我在该提交中添加了另一个文件。于是我在本地撤消了,执行上面的命令从 GitHub 中清除,然后在本地再次提交,然后同步。现在一切都好!请注意,我知道该分支没有其他提交。
      【解决方案4】:

      这也可能是由于在为 Repo 命名时引起的一些名称错误造成的。 如果上述任何答案都不起作用。这对我有用:

      删除该 repo 并创建一个新的,然后再次尝试以下命令:

      cd 'Local Directory Path'
      git remote add origin *your_git_name.git*
      git push -u origin master
      

      如果添加原点节目已经存在,请改用这个:

      git remote set-url origin *your_git_name.git*
      

      【讨论】:

        【解决方案5】:

        试试这个,在我的情况下它有效

        git rebase --abort

        【讨论】:

          【解决方案6】:

          警告:

          寻求“git pull”并不是总是解决方案,所以要小心。如果您有意更改了存储库历史记录,您可能会遇到这个问题(Q 中提到的问题)。在这种情况下,git 会将您的历史更改与远程存储库中的新更改混淆。因此,您应该选择git push --force,因为调用git pull 会有意撤销您对历史记录所做的所有更改。

          【讨论】:

            【解决方案7】:

            如果有人在尝试推送到 heroku 时遇到此错误,那么只需将 'origin' 替换为 'heroku' 像这样: git push -f heroku master

            【讨论】:

              【解决方案8】:

              这是因为您在 master 中做了一些更改,所以项目要求您先拉取。如果你想推它,你可以通过输入以下内容来使用蛮力:

              git push -f origin master
              

              记得先提交更改:

              git add .
              git commit -m "Your commit message"
              

              【讨论】:

                【解决方案9】:

                使用这个命令:

                git pull --allow-unrelated-histories <nick name of repository> <branch name>

                喜欢:

                git pull --allow-unrelated-histories origin master

                当项目没有任何共同祖先时会发生此错误。

                【讨论】:

                  【解决方案10】:

                  当我在开发分支时发生这种情况,而我的主分支没有最新更新。

                  所以当我尝试从开发分支 git push 时,我遇到了这个错误。

                  我通过切换到master分支,git pull,然后回到develop分支和git push来修复它。

                  $ git fetch && git checkout master
                  $ git pull
                  $ git fetch && git checkout develop
                  $ git push
                  

                  【讨论】:

                    【解决方案11】:

                    这是因为您对其主节点进行了相互冲突的更改。而你的存储服务器无法用这些话告诉你,所以它给出了这个错误,因为这不是他为你处理这些冲突的问题,所以他要求你自己做。作为?

                    1-git pull 这会将您的代码从您的存储库合并到您的站点主代码。 因此显示了冲突。

                    2- 处理这些手动冲突。

                    3-

                    git push origin master
                    

                    很快,你的问题已经解决了。

                    【讨论】:

                      【解决方案12】:

                      我在 github 中创建了新的 repo,我遇到了同样的问题,但它在拉取时也有问题,所以这对我有用。

                      但是在已经有很多代码的仓库中不建议这样做 可能会搞砸一切

                      git push origin master --force
                      

                      【讨论】:

                      【解决方案13】:

                      我有同样的问题。 我使用 Git Totoise。 只需右键单击 -> TotoiseGit -> 清理。 现在你可以推送到 Github 它对我很好:D

                      【讨论】:

                        【解决方案14】:

                        我在开发机器上遇到了这个问题。 dev 分支运行良好,但 master 分支给了我(而git pushing 在dev 分支上):

                        ! [rejected]        master -> master (non-fast-forward)
                        

                        所以我尝试了:

                        git checkout master
                        git pull
                        

                        这给了我:

                        You asked me to pull without telling me which branch you
                        want to merge with, and 'branch.master.merge' in
                        your configuration file does not tell me, either.
                        

                        我发现 .git/config 中缺少 master 分支并添加:

                        [branch "master"]
                            remote = origin
                            merge = refs/heads/master
                        

                        之后git pushdev 分支上也运行良好。

                        【讨论】:

                          【解决方案15】:

                          如果 git pull 没有帮助,那么您可能已经推送了更改 (A),之后使用 git commit --amend 添加了更多更改 (B)。因此,git 认为您可能会丢失历史记录 - 尽管 B 包含来自 A 的所有更改,但它会将 B 解释为不同的提交。

                                       B
                                      /
                                  ---X---A
                          

                          如果在A 之后没有人更改 repo,那么你可以做git push --force

                          但是,如果在A之后有其他人的更改:

                                       B
                                      /
                                  ---X---A---C
                          

                          那么您必须将人员从A 更改为B (C->D)。

                                       B---D
                                      /
                                  ---X---A---C
                          

                          或手动解决问题。我还没想好怎么做。

                          【讨论】:

                            【解决方案16】:

                            试试这个命令:“git pull origin master”

                            它对我有用。

                            查看此链接:https://help.github.com/articles/dealing-with-non-fast-forward-errors

                            【讨论】:

                              【解决方案17】:

                              ! [拒绝] master -> master(非快进)

                              不要惊慌,这非常容易解决。你所要做的就是发出一个拉动,你的分支就会快进:

                              $ git pull myrepo master

                              然后重试你的推送,一切都会好起来的:

                              $ git push github master

                              【讨论】:

                                【解决方案18】:

                                我刚刚收到此错误。

                                我在创建本地 git 存储库后创建了一个 github 存储库,因此我需要在推送到 github 之前接受对本地的更改。在这种情况下,唯一的变化是创建 github 存储库时作为可选步骤创建的自述文件。

                                git pull https://github.com/*username*/*repository*.git master
                                

                                repository URL 是从项目 github 页面上获取的:

                                然后我重新初始化(这可能不需要)

                                git init
                                git add .
                                git commit -m "update"
                                

                                然后推:

                                git push
                                

                                【讨论】:

                                • 这个答案反映了实际案例场景。
                                【解决方案19】:

                                你需要做的

                                git branch
                                

                                如果输出类似于:

                                * (no branch)
                                master
                                

                                然后做

                                git checkout master
                                

                                确保您没有任何待提交的提交,因为签出将丢失所有未提交的更改。

                                【讨论】:

                                  【解决方案20】:

                                  我唯一能够解决此问题的是删除本地和 git 存储库并在两端再次创建相同的存储库。目前工作正常。

                                  【讨论】:

                                  • 我总是在 Dropbox 上备份我的 git 存储库。这样我就不用删除本地repo了,我只需要在出现情况时从Dropbox中复制粘贴相关目录即可。
                                  【解决方案21】:

                                  正如错误消息所说:git pull,然后再尝试git push。显然您的本地分支与您的跟踪分支不同步。

                                  根据项目规则和您的工作流程,您可能还想使用git pull --rebase

                                  【讨论】:

                                  • 它显示了这个自动合并 README.md 自动合并失败;修复冲突,然后提交结果。
                                  • @Asantoya17 在远程主机上所做的更改与您的更改冲突。查看文件并查看它们。然后提交解析的结果。请获取教程或书籍或至少阅读消息。
                                  • 拉是什么意思?使您能够从存储库的网站推送文件或获取和下载文件? (例如位桶)
                                  • @AndrewS git push --force origin master。如果您在生活中不止一次遇到此类问题,您的项目工作流程就会中断。特性应该在分支中开发并在没有快速转发的情况下合并,如果特性“失败”,您应该恢复合并提交(最好在将特性合并到主分支之前先在集成分支中进行测试)。虽然不知道 Eclipse。
                                  • 如果git pull origin trunk:master报告该错误怎么办?
                                  猜你喜欢
                                  • 2023-03-08
                                  • 1970-01-01
                                  • 2013-12-26
                                  • 1970-01-01
                                  • 1970-01-01
                                  • 2012-03-21
                                  • 2016-06-29
                                  • 1970-01-01
                                  • 1970-01-01
                                  相关资源
                                  最近更新 更多