所以我在一个名为'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
向我显示所有内容都是最新的,并在此之后进行推送,给出了与上述相同的错误。
有人可以帮帮我吗?
感谢。
答案 0 :(得分:2)
当您键入git push
而没有任何参数时,其行为取决于push.default
设置的值。 push.default
的默认值为matching
,根据git help config
,其执行以下操作:
matching
- 推送两端具有相同名称的所有分支。这适用于那些将所有分支准备成可发布的形状然后用一个命令将它们推出的人。它不适合推入多个用户共享的存储库,因为如果其他用户更新了分支,本地停止的分支将尝试非快速推送。
换句话说,如果您的本地存储库有一个名为acceptance
的分支,并且远程存储库有一个名为acceptance
的分支,那么git push
将尝试创建远程acceptance
即使您没有签出acceptance
,也会对您的acceptance
分支进行分支。
所以,我的猜测是你在过去的某个时刻检查过acceptance
,但项目中的其他人(或者你可能来自存储库的不同克隆)将新的提交推送到{{1} }。这导致您的本地acceptance
分支位于远程acceptance
分支之后。现在,无论何时键入acceptance
,您的Git都会尝试将远程git push
分支备份到您在本地存储库中的版本。
要解决此问题,我建议将acceptance
设置为push.default
(如果您的Git版本中没有simple
,则设置upstream
- 它仅在1.7中添加。 11)。
答案 1 :(得分: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