我对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.
我该怎么做才能摆脱错误?
P.S。 :我尽量避免使用--force
选项。
答案 0 :(得分:56)
看来,有人在您的上一个git 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
检查情况。
答案 1 :(得分:20)
可能你没有在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
答案 2 :(得分:9)
我有这个问题! 我试过了:git fetch + git merge,但没解决! 我试过了:git pull,也没解决
然后我尝试了这个并解决了我的问题(类似于工程师的回答):
git fetch origin master:tmp
git rebase tmp
git push origin HEAD:master
git branch -D tmp
答案 3 :(得分:4)
我参加聚会很晚,但是我在github help page中找到了一些有用的指示,我想在这里分享。
有时候,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 :(得分:4)
尝试此命令
addMessageToConversation()
即$ git push -f -u origin <name of branch>
答案 5 :(得分:2)
我有类似的问题,我解决了它: git pull origin
答案 6 :(得分:1)
我遇到了这个问题,以上建议都没有帮助我。我能够正确地获取所有内容。但推动总是失败。它是位于Windows目录下的本地存储库,有多个客户端通过VMWare共享文件夹驱动程序使用它。似乎其中一个系统锁定了Git存储库进行写入。停止相关的VMWare系统后,导致锁定一切立即修复。几乎不可能弄清楚,哪个系统会导致错误,所以我不得不一个接一个地阻止它们直到成功。
答案 7 :(得分:1)
嗯,我在这里使用了这个建议,它把我的本地代码直接合并到主人身上。 ....所以拿出一粒盐。我的同事说以下有助于解决这个问题,需要重新分配我的分支。
git branch --set-upstream-to=origin/feature/my-current-branch feature/my-current-branch
答案 8 :(得分:1)
对于完全相同的错误,我并不是唯一的开发人员。
所以我同时提交和推送我的更改,在 <div id="working-with-us">
对话框弹出的底部看到:
...但我犯了一个大错误,忘记按 Commit
按钮查看是否有最新的,但我没有。
提交成功执行,但不是推送,而是给出了同样提到的错误; ...即使其他开发人员没有更改与我相同的文件,我也无法提取最新的文件,因为出现了相同的错误。
大多数时候我更喜欢使用 Sourcetree 的 GUI(图形用户界面)。这个解决方案可能并不理想,但是这让我重新开始工作,而不必担心我可能会丢失我的更改或损害其他开发者的最新更新。
右键单击您之前的提交以撤消本地提交的更改,然后像这样选择 Fetch
:
一旦所有加载微调器消失并且 Sourcetree 完成加载前一个提交,在窗口的左上角,点击 Reset current branch to this commit
按钮...
...然后会弹出一个对话框,点击右下角的Pull
按钮:
拉取最新版本后,如果没有出现任何错误,请跳至第 4 步(下面的下一步)。否则,如果您此时发现任何合并冲突,就像我对 OK
文件所做的那样:
...然后单击顶部的 Web.config
按钮,将出现一个对话框弹出窗口,您需要编写一个 Descriptive-name-of-your-changes,然后单击 {{ 1}} 按钮:
...一旦 Sourcetree 完成保存更改的文件,请在 STEP 2 中重复操作(上面的上一步),然后您的本地文件将具有最新更改。现在可以通过打开在 Sourcetree 左列底部看到的 Stash
重新应用您的更改,使用箭头展开您的隐藏,然后右键单击以选择 OK
,然后选择 {{ 1}} 弹出对话框中的按钮:
如果您现在有任何合并冲突,请转到您首选的文本编辑器,例如 Visual Studio Code,并在受影响的文件中选择 STASHES
链接,然后保存:
然后返回 Sourcetree,点击顶部的 Apply Stash 'Descriptive-name-of-your-changes'
按钮:
然后右键单击冲突的文件,并在 OK
下选择 Accept Incoming Change
选项:
终于!!!我们现在可以提交我们的文件,也可以在点击 Commit
按钮之前勾选 Resolve Conflicts
选项:
附言在写这篇文章的时候,另一个开发者在我提交之前提交了一个提交,所以不得不重复很多步骤。
答案 9 :(得分:0)
在Eclipse中执行以下操作:
GIT存储库>遥控器>源>右键单击并说“获取”
GIT存储库>远程跟踪>选择您的分支并说合并
转到项目,右键单击文件,然后说“从上游获取”。
答案 10 :(得分:0)
答案 11 :(得分:0)
这是解决此问题的另一种方法
>git pull
>git commit -m "any meaning full message"
>git push
答案 12 :(得分:-1)
git reset --soft HEAD~1
git pull