【问题标题】:How do I change the git branch from which I branched?如何更改分支的 git 分支?
【发布时间】:2014-06-08 21:31:12
【问题描述】:

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

当我从 github 上的 other-feature 分支创建拉取请求时,我意识到它显示了来自原始功能分支的大量提交 - 应该正确合并以从原始分支开发的提交。

我认为我做错的是在我做git checkout -b feature/other-feature 之前省略了git checkout develop,所以我想我想要纠正这种情况的方法是将 other-feature 重新定位到开发。

但是考虑到我已经将我的错误推到了原点,并且其他人有这个 repo 的克隆,我是否需要 rebase 或做其他事情?

【问题讨论】:

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


    【解决方案1】:

    是的,您需要重新设置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.

    这个变基将:

    1. 接受feature/other-feature 中的提交,这些提交在feature/earlier-feature不是
    2. 将这些提交重新应用到develop

    您应该最终得到一个更改后的分支 feature/other-feature,它现在基于 develop


    备注

    • 由于变基,您必须将分支强制推送到 GitHub 存储库。这不是问题,只要您拥有存储库的唯一克隆。如果您将 repo 与其他人一起使用,事情就会变得更加困难(见下文)。
    • 变基可能会导致冲突。您必须手动解决这些问题。
    • 延伸阅读:变基背后的概念,以及rebase --onto的含义在《Pro Git》一书中都有很好的解释。请参阅第 3.6 章,Git Branching - Rebasing

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

    你写

    但是考虑到我已经把我的错误推到了起源和其他人有 这个 repo 的克隆,我需要 rebase 还是做其他事情?

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

    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。不得不告诉所有人是你为变基所付出的代价:-)。

    【讨论】:

    • 谢谢@sleske。我已经澄清了这个问题,因为其他人已经克隆了这个 repo。这在什么方面使它变得更加困难?
    • @jah:我在回答中添加了更多信息。希望对您有所帮助。
    • 优秀的答案@sleske。效果很好,非常感谢!
    猜你喜欢
    • 2020-08-20
    • 2019-12-22
    • 1970-01-01
    • 2021-09-03
    • 2011-11-25
    • 2017-12-08
    • 2018-07-05
    • 2014-04-27
    • 2022-01-05
    相关资源
    最近更新 更多