如何在GitHub上合并远程更改?

时间:2009-11-11 05:03:42

标签: git github

我在尝试第一次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.

如何修复此问题并合并远程更改?

8 个答案:

答案 0 :(得分:104)

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

  

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

     

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

答案 1 :(得分:82)

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

git push origin +some_branch

答案 2 :(得分:20)

您可能在github上进行了一些您从未合并过的更改。尝试git pull获取并合并更改,然后您应该能够推送。对不起,如果我误解了你的问题。

答案 3 :(得分:11)

如果你“git pull”并且它说“已经是最新的”,并且仍然会收到此错误,那可能是因为您的其他分支机构之一并不是最新的。尝试切换到另一个分支并确保在尝试再次“git push”之前它也是最新的:

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

$ git checkout foo
$ git pull

您可以通过发出命令来查看您获得的分支:

$ git branch

答案 4 :(得分:7)

你可以强迫它推,但是只有当你非常确定你在做什么时,请这样做。

命令是:

git push -f 

答案 5 :(得分:3)

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

您可以通过删除本地标记来解决此问题:

$ git tag --delete foo_tag

答案 6 :(得分:2)

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

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

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

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

答案 7 :(得分:0)

1)强制拉动以覆盖本地更改

如果您不关心本地所做的更改,并且想从存储库中获取代码,则可以强制执行拉动。这将覆盖您在计算机上所做的所有本地更改,系统会在存储库中显示该版本的副本。

在IDE中执行以下命令:

git reset -- hard

git pull

这将立即破坏您的所有本地更改,因此请确保您知道自己在做什么并且不需要本地更改。

2)同时保留更改(本地更改和来自仓库的更改)

如果要保留两个更改(本地完成的更改和存储库中存在的更改),则可以添加并提交更改。当您拉时,显然会有合并冲突。在这里,您可以使用IDE中的工具(例如Difftool和mergetool)比较这两段代码,并确定保留哪些更改和删除哪些更改。这是中间的方法;除非您手动将其删除,否则所有更改都不会丢失。

git add $the_file_under_error

git commit

git pull