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

rar*_*rrr 6 git github git-rebase

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

方案如下:

  1. 我为我的功能创建了一个master的分支
  2. 做一些工作...
  3. 我从主人到我当地的分支机构:

    git fetch
    git rebase origin/master
    
    Run Code Online (Sandbox Code Playgroud)
  4. 我处理任何合并冲突,然后继续变基

    git mergetool
    git rebase --continue
    
    Run Code Online (Sandbox Code Playgroud)
  5. 因为我是唯一一个在我的分支上工作的人,所以我希望能够将我当前的状态推到一起

    git push origin myBranch
    
    Run Code Online (Sandbox Code Playgroud)
  6. 但是,当我尝试推动时,我得到以下内容

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

小智 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他的回答中所说的那样,如果在签出功能分支时执行以下操作,则必须强行推送功能分支:

  • 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- 如果你是唯一一个在该分支上工作的人,不应该导致任何问题.