如何更改我分支的git分支?

时间:2014-04-23 20:33:15

标签: git version-control github branching-and-merging

我正在开发一个功能分支,我做了git checkout -b feature/other-feature,做了一些工作,提交了它,然后将它推送到github上的origin feature / other-feature。

当我从github上的other-feature分支创建一个pull请求时,我意识到它显示了来自原始功能分支的一组提交 - 应该合并的提交应该从原始分支开发。

我认为我做错了是在git checkout develop之前省略git checkout -b feature/other-feature,所以我认为我想要纠正这种情况的是将其他特征改为开发。

但鉴于我把我的错误推到了原点并且其他人都有这个回购的克隆,我是否需要改变或做其他事情?

1 个答案:

答案 0 :(得分:3)

是的,您需要修改feature/other-feature的副本。但是,在这种情况下,简单的git rebase develop可能无效,因为您分支了另一个功能分支,而不是直接关闭develop。您需要使用rebase --onto

git rebase --onto develop feature/earlier-feature feature/other-feature

此处,feature/earlier-feature是您在死亡时检出的功能分支 git checkout -b feature/other-feature

此rebase将:

  1. 参加feature/other-feature not feature/earlier-feature提交。
  2. 将这些提交重新应用于develop
  3. 您最终应该使用已更改的分支feature/other-feature,该分支现在基于develop


    备注

    • 由于重新定位,您必须强制将分支推送到GitHub存储库。这不是问题,只要您拥有存储库的唯一克隆。如果您将repo与其他人一起使用,事情会更加困难(见下文)。
    • rebase可能会引起冲突。您必须手动解决这些问题。
    • 进一步阅读:变形背后的概念以及rebase --onto的含义在书#34; Pro Git"中得到了很好的解释。见第3.6章,Git Branching - Rebasing

    如果其他人克隆了您的存储库

    你写

      

    但鉴于我已将我的错误推向原点并且其他人也有   这个回购的克隆,我需要变基或做别的吗?

    您仍然可以如上所述进行变基。但是,您不能以旧名称强制推送已重新分支的分支。而是创建分支的副本:

    git checkout -b feature/other-feature-2 feature/other-feature
    

    这将创建一个新分支feature/other-feature-2,它是feature/other-feature的精确副本。然后,您可以重新绑定新分支,并以新名称推送它。 然后告诉所有人feature/other-feature已被feature/other-feature-2取代,并在GitHub上删除feature/other-feature。必须告诉每个人你为变基所支付的价格: - )。