为什么“git Push”被拒绝? (“git pull”没有帮助)

问题描述 投票:0回答:6

我当前的分支是

my_branch
。尝试将更改推送到远程存储库,我得到:

$ git push
Counting objects: 544, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (465/465), done.
Writing objects: 100% (533/533), 2.04 MiB | 1.16 MiB/s, done.
Total 533 (delta 407), reused 0 (delta 0)
To [email protected]
   4ed90a6..52673f3  my_branch -> my_branch
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to '[email protected]'
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
会导致:

$ git pull
Already up-to-date.

为什么我会收到此错误? 我怎样才能解决这个问题并成功执行

git push

git git-push
6个回答
35
投票

我当前的分支是 my_branch。

那是你的问题。当您拉取时,Git 会告诉您您的分支

my_branch
是最新的,而不是 master
,它位于 
origin/master
 后面,使得快进合并变得不可能。 

为了推送 master,您需要查看

master

 并拉取。这将合并正在等待的更改,并允许您推送自己的更改。
origin/master

[如果您的主分支已经配置为在拉取时变基,那么您只需按照其他答案中的描述在主分支上进行拉取,但否则:]

11
投票
如果您收到非快进消息,这意味着您只能将提交推送到现有提交之上,但您正在尝试其他方式。在推送之前对 master 进行变基(假设远程称为 origin):

git checkout master git pull # resolve conflicts, if any git push

另请参阅这个问题:
git rebase 和 git push:非快进,为什么使用?

将开发者权限更改为“维护者”

4
投票


3
投票
这会产生同样的错误。

Git Hooks 在本地运行,因此它们可以在推送之前拦截并“预处理”您的提交。

有关 Git Hooks 的更多信息:

https://githooks.com/

您应该能够在存储库的根目录中找到挂钩,此处:

git checkout master git pull --rebase origin master git push 。 通读钩子文件可能有帮助,也可能没有帮助;它们充满了高级 git 命令和正则表达式。 使用文件资源管理器/Finder 进行查看,因为以句点为前缀的文件(.git、.gitignore)通常隐藏在 IDE 中。

当我尝试推送一个名为 
.git/hooks

的分支时,我遇到了同样的错误,经过一番查看后,我发现所有其他项目分支都被命名为

feature/JIRA-123_description-text

,所以我只是在功能一词中缺少了 
s
。重命名分支修复了它。
因此,如果拉 master 等不能解决问题,请尝试查看其他一些分支名称并匹配格式。或者检查文档以查看是否有特殊的分支命名策略,或者您是否尝试以错误的文件格式推送某些内容等。

什么为我解决了这个问题:

2
投票
转到

https://github.com/settings/emails

unckeck:“阻止暴露我的电子邮件的命令行推送”

我的问题是:我的电子邮件在许可证中

指定要拉取的确切分支

0
投票
features/...

可能有帮助。我当时在
git pull some_origin some_branch
,并且

some_branch

 如果没有额外的信息就不会拉 
git pull
,尽管它已被签出。没有正确拉动,
some_branch
自然被拒绝了。
但是,这不是有意的行为。可能的原因是点文件的非常规 git 
configuration

,工作树和 git 目录是分开的。

© www.soinside.com 2019 - 2024. All rights reserved.