我的git rebase工作流程出了什么问题?

时间:2015-02-19 20:14:40

标签: git github git-rebase

我的团队正在从git merge工作流转向rebase工作流,我不明白我做错了什么。我主要是从this blog post作为模板工作。最终,希望能够提交一个github pull请求,其中包含来自我的分支的提交,该请求与master没有合并冲突。如果拉取请求只能包含我的提交(用于代码审查),那就太好了。

方案如下:

  1. 我为我的功能
  2. 创建了一个主分支
  3. 做一些工作......
  4. 我通过以下方式从master转到我当地的分支机构:

    git fetch
    git rebase origin/master
    
  5. 我处理任何合并冲突,然后继续使用

    进行变基
    git mergetool
    git rebase --continue
    
  6. 由于我是唯一一个在我的分支机构工作的人,我希望能够用

    来推动我现在的状态
    git push origin myBranch
    
  7. 然而,当我尝试推动时,我得到以下

    $ 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.
    
  8. 如果我尝试git rebase origin/myBranch我会遇到很多冲突,因为我从主人那里提交的提交抱怨我的分支中存在的提交来自之前的rebase (但我从未亲自改变过) 即可。

3 个答案:

答案 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
  • Resolve merge conflicts
  • git push origin feature_branch
  • Open pull request

正如mipadihis 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?,它可以让您进一步了解如何解决这个问题。