Git - 推送功能分支rebase后

时间:2017-02-01 15:03:30

标签: git git-branch gerrit branching-and-merging

我有一个git repo,目前我正在使用功能分支。

我有类似的东西:

dev: ---1--2--3--
                \
fb:              --f1

当我在我的功能分支上工作时,发生了更多对dev的提交,所以我对它进行了重新设置,现在我的提交已经改变了

dev: ---1--2--3--4--5----
                      \
fb:                    --f1(another)

所以现在我无法将其推送到远程功能分支,因为SHA无效。我无法强行推送,因为它被服务器禁止。

那么,在这种情况下,正确的工作流程是什么,我该怎么办?

3 个答案:

答案 0 :(得分:1)

我的建议是merge remote/dev into local/fbdelete remote/fb然后使用git history推送local / fb。

  • 撤消rebase并将remote / dev合并到local / fb

    # undo rebase: reset your local/fb with remote/fb
    $ git checkout fb
    $ git reset --hard origin/fb
    
    # merge and push to remote/fb 
    $ git pull origin dev
    $ git push origin fb
    
  • 删除remote / fb 分支,然后按 local / fb with history

    $ git push origin --delete fb      # delete remote/fb branch
    $ git push origin fb  
    

答案 1 :(得分:0)

例如,您可以执行以下操作之一:

  • 删除远程分支,然后推送本地分支
  • 将您的本地分支推送到新命名的远程分支
  • 撤消rebase并执行合并
  • 说服存储库托管服务商允许强制推送,然后强制推送您的本地分支

答案 2 :(得分:0)

这取决于您公司/团队的预期整体工作流程。但是,他们可能还没有完全考虑过它。

防止对所有分支进行强制推送,并要求对功能分支进行重新分配是相互矛盾的。这两件事都可以是工作流程的合理部分,但不是相同的工作流程。

两个选项

如果强制推送功能分支必须在您的公司内被拒绝,那么结果是您无法重新绑定这些功能分支。您需要预先形成非快进合并。

如果您的公司希望您重新设置功能分支,那么他们必须让repo接受强制推送到这些功能分支。让git拒绝强制推动某些分支而不是所有分支是非常容易的。

邋around的解决方法

您可以在每次rebase时删除功能分支,并且每次都创建一个新分支。这非常草率,会导致一些荒谬的不必要的分支。您的公司/团队应该考虑他们的工作流程策略以避免此类事情。