我在尝试第一次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.
如何修复此问题并合并远程更改?
答案 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