Git push拒绝了“非快进”


90

对于git目前在团队环境中使用它来管理我们的代码,我还很陌生。我遇到了一些变基问题,并使用

git checkout --ours filename.txt
git add filename.txt
git rebase --continue

现在,我希望推送更改,因此运行以下命令

$ git push origin feature/my_feature_branch

给我以下错误:

To ssh://git@coderepo.com:7999/repo/myproject.git
 ! [rejected]        feature/my_feature_branch -> feature/my_feature_branch (non-fast-forward)
error: failed to push some refs to 'ssh://git@coderepo.com:7999/repo/myproject.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Merge the remote changes (e.g. 'git pull')
hint: before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

我该怎么办才能消除错误?

PS:我避免--force尽可能多地使用该选项。


Answers:


76

看来有人在您的lastgit fetch和之间推送了新的提交git push。在这种情况下,您需要重复步骤并重新设置一次基准my_feature_branch时间。

git fetch
git rebase feature/my_feature_branch
git push origin feature/my_feature_branch

之后,git fetch我建议与检查情况gitk --all


启用git pull origin master:master的操作,默认应为合并。这是合并冲突还是没有。这是唯一要问的问题。
mathtick

24

可能您在重新设置基准之前没有获取远程更改,或者有人推送了新的更改(在您重新设置基础并尝试推送时)。请尝试以下步骤:

#fetching remote 'feature/my_feature_branch' branch to the 'tmp' local branch 
git fetch origin feature/my_feature_branch:tmp

#rebasing on local 'tmp' branch
git rebase tmp

#pushing local changes to the remote
git push origin HEAD:feature/my_feature_branch

#removing temporary created 'tmp' branch
git branch -D tmp

这就解决了我的问题:提交代码时,我做了一个重新设置(太晚了,已经有更改了,应该在提交之前完成)。即使没有冲突,我也无法推动。在应用了上述魔术之后,它开始起作用。谢谢。
李静

18

我有这个问题!我试过:git fetch + git merge,但是没有解决!我试过:git pull,也没有解决

然后,我尝试了一下并解决了我的问题(类似于工程师的回答):

git fetch origin master:tmp
git rebase tmp
git push origin HEAD:master
git branch -D tmp

7
这把我搞砸了,我直接把东西推向了主人,并整天推开了部署……所有人都很生气……。真棒!
Mike Q

6
在给某人危险的工具之前,可能想总结一下自己在做什么。
Mirv-马特

10

我遇到了类似的问题,并通过以下方法解决了问题: git pull origin


1
当我拉远程分支时收到有问题的错误时对我有帮助。
GChuf

7

我参加聚会很晚,但是我在github帮助页面上找到了一些有用的说明,我想在这里分享。

有时,Git在不丢失提交的情况下无法对远程存储库进行更改。发生这种情况时,您的推送将被拒绝。

如果其他人已将您推送到同一分支,Git将无法推送您的更改:

$ git push origin master
To https://github.com/USERNAME/REPOSITORY.git
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'https://github.com/USERNAME/REPOSITORY.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 fetch origin
# Fetches updates made to an online repository
$ git merge origin YOUR_BRANCH_NAME
# Merges updates made online with your local work

或者,您可以简单地使用git pull一次执行两个命令:

$ git pull origin YOUR_BRANCH_NAME
# Grabs online updates and merges them with your local work

4

试试这个命令

$ git push -f -u origin <name of branch>

$ git push -f -u origin master


在其他人没有的情况下,这对我的情况很有用。有时您只需要告诉git -f -u
gcr

1

在共享本地存储库上写锁

我遇到了这个问题,上述建议均无济于事。我能够正确获取所有内容。但是推送总是失败。它是Windows目录下的本地存储库,有几个客户端通过VMWare共享文件夹驱动程序与其一起工作。似乎其中一个系统锁定了Git存储库以进行写入。停止相关的VMWare系统后,导致锁定的所有组件立即修复。几乎不可能弄清楚是哪个系统导致错误,所以我不得不逐一阻止它们,直到成功。


1

好吧,我在这里使用了建议,因为它把我的本地代码直接合并到了主服务器上,这使我很困惑。....因此,将其与一粒盐一起食用。我的同事说,以下内容有助于解决此问题,这是重新分配我的分支机构所必需的。

 git branch --set-upstream-to=origin/feature/my-current-branch feature/my-current-branch

0

在Eclipse中执行以下操作:

GIT存储库>远程>源>右键单击并说获取

GIT存储库>远程跟踪>选择您的分支并说合并

转到项目,右键单击文件,然后说从上游获取。


0
  1. 将代码移到新分支-git branch -b tmp_branchyouwantmergedin
  2. 更改为要合并到的分支-git checkout mycoolbranch
  3. 重置要合并到的分支-git branch reset --hard HEAD
  4. 将tmp分支合并到所需分支-git分支合并tmp_branchyouwantmergedin
  5. 推向原点

0

这是解决此问题的另一种方法

>git pull
>git commit -m "any meaning full message"
>git push

-1
  1. 撤消本地提交。这只会撤消提交并将更改保留在工作副本中
git reset --soft HEAD~1
  1. 拉最新的变化
git pull
  1. 现在,您可以在最新代码的基础上提交更改
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.