[英]Git push rejected "non-fast-forward"
我是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
选项。
看起来,有人在你最后一次git fetch
和git push
之间推送了新的提交。 在这种情况下,您需要重复您的步骤并再一次 rebase my_feature_branch
。
git fetch
git rebase feature/my_feature_branch
git push origin feature/my_feature_branch
在git fetch
之后,我建议使用gitk --all
检查情况。
可能您在变基之前没有获取远程更改,或者有人推送了新的更改(当您变基并尝试推送时)。 尝试以下步骤:
#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 push -f -u origin <name of branch>
即$ git push -f -u origin master
我有这个问题! 我试过:git fetch + git merge,但没有解决! 我试过:git pull,也没有解决
然后我尝试了这个并解决了我的问题(类似于工程师的回答):
git fetch origin master:tmp
git rebase tmp
git push origin HEAD:master
git branch -D tmp
我迟到了,但我在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
我有一个类似的问题,我解决了它: git pull origin
就我而言,对于完全相同的错误,我也不是唯一的开发人员。
所以我同时提交并推送我的更改,在Commit
对话框弹出窗口的底部可以看到:
...但是我犯了一个巨大的错误,就是忘记点击Fetch
按钮来查看我是否有最新的,而我没有。
提交成功执行,但不是推送,而是给出了相同的错误; ...即使其他开发人员没有更改与我相同的文件,我也无法提取最新的文件,因为出现了相同的错误。
大多数时候我更喜欢坚持使用 Sourcetree 的GUI(图形用户界面) 。 这个解决方案可能并不理想,但这就是让我重新开始的原因,而不用担心我可能会丢失我的更改或损害其他开发人员的最新更新。
右键单击您之前的提交以撤消本地提交的更改,然后选择Reset current branch to this commit
,如下所示:
一旦所有加载微调器消失并且 Sourcetree 完成加载上一个提交,在窗口的左上角,单击Pull
按钮...
...然后会弹出一个对话框,然后单击右下角的OK
按钮:
拉完最新版后,如果没有出现任何错误,请跳到第 4步(下面的下一步)。 否则,如果您此时发现任何合并冲突,就像我对Web.config
文件所做的那样:
...然后单击顶部的Stash
按钮,将出现一个对话框弹出窗口,您需要编写一个 Descriptive-name-of-your-changes,然后单击OK
按钮:
...一旦 Sourcetree 完成存储您更改的文件,重复步骤 2中的操作(上述上一步),然后您的本地文件将具有最新更改。 现在可以通过打开STASHES
底部的 STASHES 来重新应用您的更改,使用箭头展开您的 stash,然后右键单击选择Apply Stash 'Descriptive-name-of-your-changes'
,然后选择OK
弹出对话框中的按钮:
如果您现在有任何合并冲突,请转到您首选的文本编辑器,如 Visual Studio Code,并在受影响的文件中选择Accept Incoming Change
链接,然后保存:
然后回到 Sourcetree,点击顶部的Commit
按钮:
然后右键单击冲突的文件,并在Resolve Conflicts
下选择Mark Resolved
选项:
最后!!! 我们现在可以提交我们的文件,还可以在单击Commit
按钮之前选中Push changes immediately to origin
选项:
PS 在写这篇文章的时候,另一个开发者在我提交之前提交了一个提交,所以不得不重复很多步骤。
当您使用https://github.com/在您的 GitHub 存储库中提交了一些更改,这些更改未拉入您的本地存储库时,就会出现此问题
为了解决这个问题——
git pull <git repo HTTPS LINK>
git commit -m "updates and bugs fixed"
git push
我遇到了这个问题,以上建议都没有帮助我。 我能够正确获取所有内容。 但是推送总是失败。 它是一个位于 windows 目录的本地存储库,有多个客户端通过 VMWare 共享文件夹驱动程序使用它。 似乎其中一个系统锁定了 Git 存储库以进行编写。 停止相关的VMWare系统后,导致锁的一切立即修复。 几乎不可能弄清楚是哪个系统导致了错误,所以我不得不一一阻止它们,直到成功。
好吧,我在这里使用了建议,当它直接将我的本地代码合并到 master 时,它把我搞砸了。 .... 所以把这一切都带上一粒盐。 我的同事说以下有助于解决问题,需要重新指向我的分支。
git branch --set-upstream-to=origin/feature/my-current-branch feature/my-current-branch
在 Eclipse 中执行以下操作:
GIT Repositories > Remotes > Origin > 右键单击并说 fetch
GIT Repositories > Remote Tracking > 选择你的分支并说合并
转到项目,右键单击您的文件并说从上游获取。
这是解决此问题的另一种解决方案
>git pull
>git commit -m "any meaning full message"
>git push
得到非快进错误后,只需执行以下操作:
1> git pull --rebase origin <name-of-the-remote-branch>
这会将远程更改获取到您的本地分支。 最重要的是,它将应用您的本地提交。
2> git push origin <name-of-the-remote-branch>
这会将远程分支的本地副本中的本地更改应用到 git 中的实际远程分支 repo
git结账大师
git fetch [推送到master之前公司的时间分支]
git pull --rebase [推送到master之前公司的临时分支] master
git checkout -b [新分支]
然后添加您的文件并执行以下操作:
混帐添加。
git commit -m"添加的文章"
git push -u origin [新分支]
这对我有用
有时,Git 无法在不丢失提交的情况下对远程存储库进行更改。 发生这种情况时,您的推送将被拒绝。 如果其他人与您推送到同一分支,Git 将无法推送您的更改
您可以通过以下方式解决此问题:
git pull origin YOUR_BRANCH_NAME
只有这对我有用:
您可以通过获取并合并在远程分支上所做的更改与您在本地所做的更改来解决此问题:
$ 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 reset --soft HEAD~1
git pull
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.