Git 推送拒绝了“非快进”

我对 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.

我要怎么做才能消除这个错误呢?

注意: 我尽量避免使用 --force选项。

437975 次浏览

可能在 rebase 或某人推送新的更改之前您没有获取远程更改(当您正在 rebase 并尝试推送时)。尝试以下步骤:

#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

看起来,有人推新提交之间的最后一个 git fetchgit 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

对共享本地存储库写锁

我有这个问题,以上的建议都没有帮助到我。我把所有东西都拿对了。但推动总是失败。它是一个位于 windows 目录的本地存储库,有几个客户机通过 VMWare 共享文件夹驱动程序使用它。其中一个系统似乎锁定了 Git 存储库进行编写。停止相关的 VMWare 系统后,导致锁的一切立即修复。几乎不可能找出是哪个系统导致了错误,所以我不得不一个一个地停止它们,直到成功。

我有这个问题! 我试过: git 获取 + git 合并,但没有解决! 我试过了: git pull,也不解决

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

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

我使用了这里的建议,它把我搞砸了,因为它把我的本地代码直接合并到 master。....所以对此持保留态度。我的同事说下面的内容有助于解决这个问题,需要重新定位我的分支。

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

在 Eclipse 中执行以下操作:

GIT 仓库 > 遥控器 > 起源 > 右击并说“取回”

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

转到项目,右键单击您的文件,并说从上游获取。

我已经迟到了,但是我在 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
  1. 将代码移动到一个新的 Branch-git Branch-b tmp _ branchyouwanmergedin
  2. 更改为要合并的分支以-git 签出 mycool 分支
  3. 将要合并的分支重置为-git 分支重置-硬 HEAD
  4. 将 tmp 分支合并到所需的 Branch-git 分支合并 tmp _ branchyouwanmergedin
  5. 推到原点

警告: 使用此解决方案可能会减少工作量。特别是在团队环境中,因为它可能会覆盖/删除其他人的贡献。看看另一个更好的答案: https://stackoverflow.com/a/20467414/39648

试试这个命令

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

$ git push -f -u origin master

这里有另一个解决这个问题的办法

>git pull
>git commit -m "any meaning full message"
>git push
  1. 撤消本地提交。这只会撤消提交并保留工作副本中的更改
git reset --soft HEAD~1
  1. 调出最新的变化
git pull
  1. 现在您可以在最新的代码之上提交更改

在我的情况下,完全相同的错误,我不是唯一的开发人员以及。

所以我同时提交和推动我的改变,在 Commit对话框弹出窗口的底部可以看到:

Checked option for: Push changes immediately to origin

但我犯了个大错,忘了按 Fetch键看看有没有最新的,我没有。

提交成功执行,但不是推,而是给出同样的错误; ... 即使其他开发人员没有改变相同的文件,我不能拉最新的同样的错误提出。

图形用户界面解决方案

大多数时候我更喜欢坚持使用 Sourcetree 的 图形用户界面(图形用户界面)。这个解决方案可能并不理想,但是正是这个解决方案让我重新开始工作,而不用担心我可能会丢失我的更改或者损害其他开发人员最近的更新。

步骤1

右键单击您前面的提交,撤消本地提交的更改,然后选择 Reset current branch to this commit,如下所示:

Sourcetree window with right-clicked commit and selecting: Reset current branch to this commit

步骤2

一旦所有的加载旋转器消失,Sourcetree 完成了上一个提交,在窗口的左上角,点击 abc0按钮..。

Sourcetree window with with the Pull button highlighted

然后弹出一个对话框,点击右下角的 OK按钮:

Sourcetree window dialog popup with the OK button highlighted

步骤3

拉最新,如果你没有得到任何错误,跳到 步骤4(下一步)。否则,如果您在此时发现任何合并冲突,就像我对 Web.config文件所做的那样:

Sourcetree window showing the error hint: Updates were rejected because the tip of your current branch is behind

... 然后点击顶部的 Stash按钮,弹出一个对话框,你需要写一个描述性的修改名称,然后点击 OK按钮:

Sourcetree window with Stash button highlighted and dialog popup showing input to name your stash with OK button highlighted

... 一旦 Sourcetree 完成存储您更改的文件,在 步骤2中重复操作(上一步) ,然后您的本地文件将有最新的更改。现在你可以重新应用你的改变,打开你在 Sourcetree 左栏底部看到的 STASHES,使用箭头来展开你的存储,然后右键点击选择 Apply Stash 'Descriptive-name-of-your-changes',然后在对话框中选择 OK按钮,弹出:

Sourcetree window with the Stashes section expanded and changes right-clicked with Apply Stash highlighted

Sourcetree dialog popup ask your to confirm if you would like to apply stash you your local copy

如果您现在有任何合并冲突,转到您首选的文本编辑器,如 Visual Studio Code,并在受影响的文件中选择 Accept Incoming Change链接,然后保存:

enter image description here

然后回到 Sourcetree,点击顶部的 Commit按钮:

enter image description here

然后右键单击冲突文件,在 Resolve Conflicts下选择 Mark Resolved选项:

enter image description here

步骤4

终于! ! ! 我们现在可以提交我们的文件了,在点击 Commit按钮之前还要选中 Push changes immediately to origin选项:

enter image description here

另外,在写这篇文章的时候,另一个开发人员在我提交之前提交了一个提交,所以我不得不重复很多步骤。

当您使用 https://github.com/在 GitHub 存储库中提交了一些更改,而这些更改没有提交到本地存储库中时,就会出现这个问题

为了解决这个问题

  1. 首先从 GitHub 中提取存储库,然后在 你们当地的仓库
  2. 然后将提交推送到 GitHub 存储库
  3. 您可以按照以下步骤操作
git pull <git repo HTTPS LINK>
git commit -m "updates and bugs fixed"
git push

得到 非快进错误后,只需执行以下操作:

1> git pull --rebase origin <name-of-the-remote-branch>

这将把远程更改提取到本地分支中。最重要的是,它将应用您的本地提交。

2> git push origin <name-of-the-remote-branch>

这将把远程分支的本地副本中的本地更改应用于 git 中的实际远程分支 repo

git checkout master


git fetch [the temporal branch of the company before pushing to master]


git pull --rebase [the temporal branch of the company before pushing to master] master


git checkout -b [new-branch]

然后添加您的文件并执行以下操作:

git add .


git commit -m "added article"


git push -u origin [new-branch]

这招对我很管用。

有时,Git 不能在没有 失败的提交。当这种情况发生时,您的推动被拒绝。如果另一个 如果有人和你推到了同一个分支,Git 就不能推了 你的改变

你可以通过以下方式解决这个问题:

git pull origin YOUR_BRANCH_NAME