首页 > 解决方案 > Git rebase并自动更新分支指针?

问题描述

我有一组如下分支:

            * 444ddd - somefeature3
           /
          * 333ccc - somefeature2
         /
        * 222bbb - somefeature1
       /
------* 111aaa - master

如果我在一个分支上(假设somefeature3没有somefeature2somefeature1存在),我可以通过git rebase -i 111aaa. 换句话说,我可以从这个出发:

            * 444ddd - somefeature3
           /
          * 333ccc
         /
        * 222bbb
       /
------* 111aaa - master

...对此:

            * 444eee - somefeature3
           /
          * 333ddd
         /
        * 222ccc
       /
------* 111aaa - master

特别是,commit222bbb被替换为222ccc333ccc被替换为333ddd444ddd被替换为444eee

但是,如果我关心分支指针somefeature2somefeature1,它们在这种情况下不会得到更新。我会从这个开始:

            * 444ddd - somefeature3
           /
          * 333ccc - somefeature2
         /
        * 222bbb - somefeature1
       /
------* 111aaa - master

...对此:

            * 444eee - somefeature3
           /
          * 333ddd        * 333ccc - somefeature2
         /               /
        * 222ccc        * 222bbb - somefeature1
       /               /
------* --------------*
       111aaa - master

我想要发生的是最终状态看起来像这样,分支指针somefeature2somefeature1更新somefeature3

            * 444eee - somefeature3
           /
          * 333ddd - somefeature2
         /
        * 222ccc - somefeature1
       /
------* 111aaa - master

有什么方法可以让 Git 自动更新分支指针somefeature1以及somefeature2的一部分,从而git rebase -i产生这个最终状态?

(元:这类似于这个问题,但它进一步询问是否可以让 Git 自动执行适当的 foo)

标签: gitbranchrebasefeature-branch

解决方案


我最容易做到的是使用交互式 rebase 并在exec git branch -f branchname选择这些提示之后添加。如果这对您来说很常见,那么您就处于脚本领域,请使用您最喜欢的编辑器git for-each-ref --points-at在每一行上运行,并使用一种可以输出更新的格式。


推荐阅读