1

所以我在一个名为“test_branch”的分支上。

我这样做了git add .git commit而且一切正常。

但是当我这样做时git push,它给了我错误:

! [rejected]        acceptance -> acceptance (non-fast-forward)
error: failed to push some refs to 'git@github.com:company/sample.git'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes (e.g. 'git pull') before pushing again.  See the
'Note about fast-forwards' section of 'git push --help' for details.

执行git pull向我显示所有内容都是最新的,然后进行推送,给我与上述相同的错误。

有人可以帮我吗?

谢谢。

4

2 回答 2

2

当您git push不带任何参数键入时,其行为取决于设置的值push.default。的默认值为,根据,push.default它执行以下操作:matchinggit help config

matching-- 将所有具有相同名称的分支推入两端。这适用于那些将所有分支准备成可发布的形状,然后用一个命令将它们推出的人。它不适合推送到由多个用户共享的存储库,因为如果其他用户更新了分支,本地停滞的分支将尝试非快进推送。

换句话说,如果您的本地存储库有一个名为 的分支acceptance,而远程存储库有一个名为 的分支acceptance,那么即使您没有签出,git push也会尝试使远程acceptance分支与您的分支匹配。acceptanceacceptance

所以,我的猜测是您acceptance在过去的某个时间签出,但是项目中的其他人(或者可能是您来自存储库的不同克隆)将新提交推送到acceptance. 这导致您的本地acceptance分支落后于远程acceptance分支。现在,每当您键入 时git push,您的 Git 都会尝试将远程分支备份acceptance到您在本地存储库中的版本。

要修复,我建议设置push.defaultsimple(或者upstream如果simple在您的 Git 版本中不可用 - 它仅在 1.7.11 中添加)。

于 2012-06-28T15:51:18.650 回答
1

您可能必须合并一个分支才能推送可快速转发的提交。要找出答案,首先要做

$ git fetch

然后做

$ git log --graph --decorate --oneline --all

您应该看到您尝试推送的分支不在同一行中,并且在您尝试合并的远程分支之前。

顺便说一句,git push它本身总是将所有跟踪的分支推送到它们的原点/对应物,并且您的分支可能与它们的原点对应物不是最新的。在这种情况下,只需忽略警告。您可以通过以下方式减少此警告的冗长:

$ git config advice.pushNonFastForward false

但我现在看到你真正的问题可能是 test_branch 没有被推送git push。要解决此问题,请键入:

$ git branch --set-upstream test_branch origin/test_branch
于 2012-06-28T15:39:46.460 回答