【问题标题】:How to merge remote changes at GitHub?如何在 GitHub 上合并远程更改?
【发布时间】:2010-12-15 08:23:27
【问题描述】:

我在尝试第一次 Github 推送时遇到以下错误:

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

如何解决这个问题并合并远程更改?

【问题讨论】:

    标签: git github


    【解决方案1】:

    有关详细信息,请参阅“git push --help”的“非快进”部分。

    您可以执行“git pull”,解决潜在的冲突,并“git push”结果。 “git pull”将在提交 A 和 B 之间创建合并提交 C。

    或者,您可以使用“git pull --rebase”在 A 之上重新调整 X 和 B 之间的更改,然后将结果推回。 rebase 将创建一个新的提交 D,它在 A 之上构建 X 和 B 之间的更改。

    【讨论】:

    • 我一直遇到这个问题,除了如果我执行“git pull”,我会被告知“已经是最新的”。如果我执行“git pull --rebase”,我会被告知“当前分支主控是最新的”。有任何想法吗?谢谢!
    • @larson4 我也遇到了同样的问题,但是在你做了git pull 之后,再做一次提交,然后就应该好了
    • @Patrick @larson 我有一个类似的问题,因为我没有仔细阅读错误消息。拒绝是在我没有签出的分支上。我实际上所在的分支正在成功。解决方案是git checkout other-branch; git pull; git push; git checkout branch-i-was-working-on
    【解决方案2】:

    您还可以通过在分支名称前添加 + 符号来强制推送。

    git push origin +some_branch
    

    【讨论】:

    • 谢谢,这个对我有用。其他解决方案将完全消除我的git reset --hard 的影响
    • 谢谢!我已将分支“A”推送到我的 Heroku 暂存应用程序,以在生产环境中测试某些功能。然后(在本地)我将“A”和“B”合并到“master”中,并想将“master”推送到我的登台应用程序中。遇到了各种各样的问题。这使得推动“大师”变得非常简单。谢谢!
    • 也为我工作。我花了 4 个小时才找到问题所在。非常感谢。我在本地机器(windows 7)上运行 Netbeans,并希望在本地每次推送时,在远程机器(linux)上检查。
    • 请注意,此方法可能不安全,并且可能导致某些分歧提交无法访问。
    • 这应该是公认的解决方案。其他解决方案对我不起作用
    【解决方案3】:

    您可能在 github 上有从未合并过的更改。尝试git pull 获取并合并更改,然后您应该可以推送。抱歉,如果我误解了您的问题。

    【讨论】:

    • 如果您需要拒绝远程master中的更改并推送自己的更改,请尝试使用-f键进行推送
    【解决方案4】:

    如果您“git pull”并且它显示“Already up-to-date。”,但仍然出现此错误,可能是因为您的其他分支之一不是最新的。尝试切换到另一个分支并确保一个分支也是最新的,然后再尝试“git push”:

    切换到分支“foo”并更新它:

    $ git checkout foo
    $ git pull
    

    你可以通过发出命令看到你得到的分支:

    $ git branch
    

    【讨论】:

    • 您能解释一下为什么这样做是必要的吗? (它确实解决了我的问题。)这对我来说似乎违反直觉。我不明白为什么 git 还需要另一个分支来更新,以便我推送主分支。
    • @QuinxyvonBsiex 我不确定我自己是否理解。它可能与Git本身的底层结构,以及它如何组织分支(据我了解与标签基本相同)有关。
    【解决方案5】:

    您可以强制它推动,但请仅在您确定自己在做什么时才这样做。

    命令是:

    git push -f 
    

    【讨论】:

      【解决方案6】:

      当您有冲突的标签时,也会出现此问题。如果你的本地版本和远程版本对不同的提交使用相同的标签名称,你可以在这里结束。

      你可以通过删除本地标签来解决:

      $ git tag --delete foo_tag
      

      【讨论】:

        【解决方案7】:

        当我收到此错误时,我备份了我的整个项目文件夹。然后我做了类似的事情

        $ git config branch.master.remote origin
        $ git config branch.master.merge refs/heads/master
        

        ...取决于您的分支名称(如果它不是主分支)。

        然后我做了git pull --rebase。之后,我用我备份的项目文件替换了拉取的文件。现在我准备再次提交我的更改并推送。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-10-26
          • 2017-12-15
          • 2012-10-12
          • 2020-04-21
          • 2016-03-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多