我的团队正在从git merge工作流转向rebase工作流,我不明白我做错了什么。我主要是从this blog post作为模板工作。最终,希望能够提交一个github pull请求,其中包含来自我的分支的提交,该请求与master没有合并冲突。如果拉取请求只能包含我的提交(用于代码审查),那就太好了。
方案如下:
我通过以下方式从master转到我当地的分支机构:
git fetch
git rebase origin/master
我处理任何合并冲突,然后继续使用
进行变基git mergetool
git rebase --continue
由于我是唯一一个在我的分支机构工作的人,我希望能够用
来推动我现在的状态git push origin myBranch
然而,当我尝试推动时,我得到以下
$ git push origin myBranch
To <github address>
! [rejected] myBranch -> myBranch (non-fast-forward)
error: failed to push some refs to <github address>
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
git rebase origin/myBranch
我会遇到很多冲突,因为我从主人那里提交的提交抱怨我的分支中存在的提交来自之前的rebase (但我从未亲自改变过) 即可。答案 0 :(得分:5)
如果您不想强制推送(push -f
)您的功能分支,则必须在将功能分支推送到GitHub后避免重新设置功能分支。
我使用此工作流程时没有收到您在步骤6中提到的错误。
git checkout master
git pull
git checkout -b feature_branch
git commit -m "Finish my work"
git checkout master
git pull
git checkout feature_branch
git rebase master
git push origin feature_branch
正如mipadi中his answer所述,如果在签出功能分支时执行以下操作,则必须强制推送功能分支:
git push origin feature_branch
git rebase master
git push origin feature_branch
#错误 git push -f origin feature_branch
最后一个命令 - git push -f origin feature_branch
- 如果您是唯一一个在该分支上工作的人,则不应该导致任何问题。
答案 1 :(得分:3)
您必须使用git push -f
强制推送。默认情况下,git push
仅允许快进合并(也就是说,如果新提交是远程仓库中已提交的提交的直接后代,它只允许您推送分支)。 git rebase
重写历史记录,该记录会更改所有分支上的提交,因此您必须强制推送。
答案 2 :(得分:1)
我之前见过这个错误:
git push github master
To git@github.com:Joey-project/project.git
! [rejected] master -> master (non-fast-forward)
error: failed to push some refs to 'git@github.com:Joey-project/project.git'
一般解决方案是使用以下命令的变体:
git fetch github; git merge github/master
我建议同时查看How to update topic branch with upstream changes on master?,它可以让您进一步了解如何解决这个问题。