git - 我的 git rebase 工作流程做错了什么?

标签 git github git-rebase

我的团队正在从 git merge 工作流转移到 rebase 工作流,但我不明白我做错了什么。我主要从 this blog post 开始工作作为模板。最终,希望能够提交一个 github pull request,其中包含我分支的提交,不会与 master 发生 merge 冲突。如果该 pull 请求只能包含我的提交(用于代码审查目的),那就太好了。

场景如下:

  1. 我为我的功能创建了一个 master 分支
  2. 做一些工作...
  3. 我从 master rebase 到我的本地分支:

    git fetch
    git rebase origin/master
    
  4. 我会处理任何 merge 冲突,然后继续使用

    git mergetool
    git rebase --continue
    
  5. 因为我是唯一一个在我的分支上工作的人,我希望能够通过以下方式 push 我的当前状态

    git push origin myBranch
    
  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.
    
  7. 如果我尝试 git rebase origin/myBranch 我会遇到很多冲突,因为我从 master pull 的提交提示我的分支中存在的提交来自之前的 rebase (但我个人从未改变过)

最佳答案

如果您不想强制推送 (push -f) 您的功能分支,您必须避免在已经将功能分支推送到 GitHub 后对其进行 rebase 。

我使用此工作流程而没有遇到您在第 6 步中提到的错误。

  • git checkout master
  • git pull
  • git checkout -b feature_branch
  • git commit -m "完成我的工作"
  • 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 中说,如果您在 checkout 功能分支时执行以下操作,则必须强制推送您的功能分支:

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

关于git - 我的 git rebase 工作流程做错了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28616039/

相关文章:

git - 无法符号链接(symbolic link) share/git-core/contrib/usr/local/share/git-core 不可写

git - 如何在 sonarqube 5.0 中使用 git 作为 scm 提供程序(使用 sonar-runner )

html - 如何将 index.html 链接到 github 页面的 css 文件

Git 和关于同时团队合作的问题

git - rebase 和 merge 是一回事吗?为什么有 2 个不同的程序来做一件事?

git - 如何在 Git 中安全地保存用户名和密码

GitHub 用户名更改(使用 noreply 作为提交的电子邮件)

git - 硬重置 Git 存储库后回滚到未提交的更改

git - 如何用 git gui 做一个 rebase?

git - "always" rebase 的陷阱是什么?