“拒绝Git推送非快速转发更新”是什么意思?


153

我正在使用Git管理两台计算机和我的开发。我正在尝试将更改提交到GitHub,但出现错误。

无法将一些参照推送到<repo>。为防止您丢失历史记录,非快进更新被拒绝。合并远程更改,然后再次推送。

是什么原因造成的,我该如何解决?

编辑:

拉回购返回以下内容:

*分支母版->母版(非快进)已更新

推仍然给我上述错误。


另请参阅Git非快进拒绝

Answers:


136

GitHub有一个不错的部分,名为“ 处理“非快速转发”错误

首先,这个错误可能会让人有些不知所措,不要担心。
简而言之,git无法在不丢失提交的情况下在远程进行更改,因此它拒绝push
通常,这是由另一个用户推送到同一分支引起的。您可以通过获取和合并远程分支,或使用pull一次执行两者来解决此问题。

在其他情况下,此错误是由于使用诸如git commit --amend或命令在本地进行的破坏性更改的结果git rebase
虽然你可以通过添加覆盖远程--forcepush命令,你应该只能这样做,如果你是绝对肯定这是你想要做什么。
强制推送可能会给获取了远程分支的其他用户带来问题,被认为是不正确的做法。如有疑问,请不要强行推动


Git不能像快速合并那样在远程上进行更改,Visual Git参考说明了这一点,例如:

替代文字

这不完全是您的情况,但是有助于了解什么是“快进”(HEAD将分支的位置简单地移至新的最近提交)。


branch master->master (non-fast-forward) Already-up-to-date”通常用于不跟踪其远程对应部分的本地分支机构。
例如,见此SO问题“ git pull说最新,但git push拒绝非快进 ”。
或两个分支是相互连接的,但是它们各自的历史不同:
请参阅“ 永无止境的GIT故事-我在这里做错了什么?

这意味着您的subversion分支和远程git master分支在某些方面不一致。
某些更改被推/承诺给另一个不在的更改。
开火gitk --all,它应该为您提供出了什么地方的线索-寻找历史上的“叉子”。


53

这意味着存在其他推送到远程存储库的提交,这些提交与您的提交不同。您通常可以使用

git pull

在你推之前

最终,“快进”意味着可以将提交直接应用于工作树的顶部,而无需合并。


2
这对我有用!我忘记了在存储库站点上更改了readme.md!
ryanwinchester

14

快速前进的更新是,一侧的唯一更改是在另一侧的最新提交之后,因此不需要进行任何合并。这就是说,您需要先合并更改,然后才能进行推送。


8

在这种情况下,您可能需要对推操作使用强制

git push origin master --force


1
这是不对的。github的总源将被删除并仅推送您是​​新源的旧源将被删除
logeshpalani98

6

绝对不要做某事git -fpush因为它可能导致以后的灾难性后果。

您只需要git pull在本地分支机构中做一个即可。

例如:

git pull origin 'your_local_branch'

然后做一个 git push


0

您需要合并并解决,conflicts locally然后才能将更改推送到远程仓库/分支。

1)拉(获取并合并)

$ git pull remote branch 

2)推送更改

$ git push remote branch 

您仍然可以push通过使用--forceoption 来强行选择,但是应该避免使用它,因为它可能会导致更改丢失或严重影响其他贡献者,因此应避免使用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.