Git推送被拒绝。

68
我放弃了!每当我尝试推送时,都会出现一个愚蠢的错误:
! [rejected]        master -> master (non-fast forward)
error: failed to push some refs to 'git@github.com:companyX/projectX.git'

我们团队有了新的Git设置。现在,我不再创建私有分支,而是将我们的主存储库(在Github上)Fork到我的个人账户中。

我所做的事情是:

$ git fetch upstream master:upstreammaster

这是我的当前设置:

$ git branch
master
* upstreammaster

$ git remote -v
origin  git@github.com:userX/projectX.git
upstream    git@github.com:companyX/projectX.git

其中userX是我的私有代码库。

我在我的upstreammaster分支上进行了一些更改,并从“upstream master”进行了PULL操作。 一切都合并了:

$ git pull upstream master
remote: Counting objects: 95, done.
remote: Compressing objects: 100% (60/60), done.
remote: Total 60 (delta 54), reused 0 (delta 0)
Unpacking objects: 100% (60/60), done.
From git@github.com:companyX/projectX
 * branch            master     -> FETCH_HEAD
Merge made by recursive.
stuff                      |  165 ++++++++++++--------
stuff                      |   35 ++--
stuff                       |  107 ++++++++++---
stuff                       |  105 ++++++++++---
stuff             |   24 ++--
stuff               |    9 +-
stuff                   |   53 +++----
stuff            |   44 +++---
stuff              |   52 +++----
stuff |   32 +----
stuff          |    4 +-
 stuff             |  138 ++++++++---------
stuff     |   58 ++++----
stuff    |  115 ++++++++------
stuff          |    5 +-
stuff                       |   39 ++---
stuff                        |   28 ++--
 17 files changed, 560 insertions(+), 453 deletions(-)

但是当我尝试执行以下操作:

$ git push upstream master
To git@github.com:companyX/projectX.git
 ! [rejected]        master -> master (non-fast forward)
error: failed to push some refs to 'git@github.com:companyX/projectX.git'

非常感谢您的任何帮助!如果您需要澄清,请提出,我会回复!


@drozzy:你知道为什么Git不接受你的命令吗?这个命令曾经对我有效。在我把Git移动到Mac上的另一个文件夹后,我收到了类似的错误信息。 - Léo Léopold Hertz 준영
现在我主要做的是"git push upstream master",在将我的其他分支合并到upstreammaster之后。 - Andriy Drozdyuk
请参阅Git push非快进更新被拒绝 - user456814
请检查您在git服务器repo文件夹上的文件夹权限,以获取写入访问权限(包括子目录!) - Jonathan
如果您有两个名称相似的分支,例如我的情况是第二个分支命名为:branch1.name() + '/specification',那么git push可能会被拒绝。Git拒绝了它,我通过@Pat Notz解决了我的问题。 - user10123001
9个回答

28

在进行 push 操作时,尝试指定上游主分支的 refspec:

git push upstream upstreammaster:master

3
@Jarret:这对我没有用。我的代码是 $git push git@github.com:user/repo.git git@github.com:user/repo.git:master。 - Léo Léopold Hertz 준영
Masi,请尝试在第二个参数中不使用完整的URL:git push it@github.com:user/repo.git master。 - Jarret Hardie
如何在Zend Studio上完成这个任务? - albanx

20
Jarret Hardie是正确的。 或者,首先将更改合并回主分支,然后再尝试推送。 默认情况下,git push将推送所有名称与远程匹配的分支 - 没有其他分支。 所以这就是你的两个选择 - 像Jarret说的那样明确指定它,或者合并到一个公共分支,然后推送。
Git邮件列表上谈论过这个问题,很明显这种行为不会很快改变 - 许多开发人员在他们的工作流程中都依赖这种行为。
假设您的upstreammaster分支已准备好推送,那么您可以这样做:
1. 从upstream中获取任何更改。 $ git pull upstream master 2. 切换到本地主分支。 $ git checkout master 3. 从upstreammaster合并更改。 $ git merge upstreammaster 4. 推送我的更改。 $ git push upstream
在推送之前,您可能还想对自己的更改进行rebase,以使您的提交都在一起。 您可以将其作为#1和#2之间的单独步骤执行(git rebase upstream/master),也可以将其作为拉取的一部分完成(git pull --rebase upstream master)。

你的意思是“合并回到一个共同的分支,然后推送”是什么意思? 在这种情况下,哪个是共同的分支? - Andriy Drozdyuk
在检出并在分支上工作、推送包含对主分支中已删除文件的更新(我根本没有碰过)的更改后,我遇到了同样的问题。另一位开发人员尝试了一些我没听懂的 Git 命令,但问题仍然存在:git status 显示我的分支是干净的,git pull 没有任何作用,但 git push 命令仍然输出 error: failed to push some refs...。最终我通过以下步骤解决了这个问题:1. git checkout master,2. git pull,3. git checkout the_branch_name - Teemu Leisti
当你执行第一个命令(git pull upstream master)时,如果出现合并冲突,那会发生什么?你必须在继续之前解决冲突吗? - Raul Luna

14

首次使用

git pull https://github.com/username/repository master

然后尝试。

git push -u origin master

13

首先,尝试从您要推送到的相同refspec中提取。

如果这不起作用,您可以使用git push -f <repo> <refspec>来强制进行git push,但请谨慎:这种方法可能会导致在远程存储库中删除引用。


10

实际上我遇到了同样的错误,但以下评论对我有用

git push -f origin master

3
请注意,此解决方案将删除目标分支中的提交(可能包括已完成的工作)。 - edthedev

3

您的“upstream”存储库是否为裸存储库?我遇到了相同的错误,但当我更改为裸存储库时,这些错误不再发生。


太棒了,这正是导致我的问题的原因,感谢您的答案! - adamc

2

如果一切都不起作用,请尝试:

git pull --allow-unrelated-histories <repo> <branch>

然后执行:

git push --set-upstream origin master

1
如果推动请求显示为被拒绝,则尝试先从您的 GitHub 账户拉取,然后再尝试推送。

例如:

在我的情况下,它会给出一个错误 -

 ! [rejected]        master -> master (fetch first)
error: failed to push some refs to 'https://github.com/ashif8984/git-github.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

所以我做的是 -

$ git pull
$ git push

代码已成功推送到我的Github账户。


0

我的同事遇到了额外的错误:请向项目所有者或维护者请求创建默认分支

后来发现他在 Git 仓库(Gitlab)中没有足够的权限。当他的访问级别升级后,他就能够推送代码了。


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