无法推送到git仓库

16

每次尝试推送时,我都会收到来自Git的错误消息,即使在反复拉取后仍然如此:

![拒绝] master - > master(非快进式)
错误:无法将一些引用推送到'[repo url]'
为防止您丢失历史记录,拒绝了非快进式更新
在再次推送之前合并远程更改(例如'git pull')。请参见
“关于快进的说明”部分的“git push --help”了解详情。

以下是分支历史记录:

A---B---C
  |   |
  D   E-F

A initial commit (me)
B some commit (me)
C master
D some commit (other dev)
E remotes/origin/master - Merge branch 'master' of [repo url]
F Local uncommitted changes, not checked into an index

从这里开始,我拉取时什么也没得到,当我推送时出现错误。如何才能成功地再次推送?


除了您之外,是否有其他人可以进行更改,例如使用rebase压缩提交来删除旧的历史记录条目? - ismail
我认为我所提到的“另一个开发者”没有足够的知识来做那件事 :) 但如果是这样,我该如何摆脱这种情况呢? - Serhat Ozgel
2
我会使用git diff命令来比较我的更改和某个文件,然后尝试进行全新的git克隆,使用patch(1)应用我的更改,最后再次尝试推送。 - ismail
1
你尝试过使用 git fetch 确保 origin/master 是最新的吗?然后检查 git log mastergit log origin/master 确保它们符合你的预期了吗? - Henrik N
3个回答

6

在推送之前,你需要有共同的祖先,最简单的方法是执行 git pull (或者如果你想避免合并提交且重播对你没有影响,则执行git pull --rebase)。


5

我曾经遇到过完全相同的问题,这是由以下原因引起的:

我的本地分支(具有不同来源)没有更新(并且已被另一个用户修改)。您必须切换到未更新的分支(git checkout [相关分支]),然后进行 git pull。

这解决了我的问题。在这种情况下,由于这个消息

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

您必须移动到主分支(git checkout master),进行 git pull,然后返回到您正在使用的分支(git checkout whateverBranch),现在您应该能够顺利推送了。

我不确定为什么会出现这个问题;可能是由于 git push 的性质,在执行推送时会检查所有未正确更新的本地分支。


4
您的问题的解决方案是:
  1. 将更改提交,以便这些更改被提交到本地存储库。
  2. 然后从github/git服务器“Pull”代码
  3. 然后将代码“Push”到github/git服务器,您将不会遇到任何问题。
在以下网址的“Pushing a Branch”标题下阅读更多内容:

处理“non-fast forward rejects”

希望对您有所帮助。
谢谢

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接