重新启动具有子分支的分支

Jos*_*f.B 6 git

我公司的政策是任何拉取请求都必须使用重新分支.我有一个本地Dev分支,它有'任务'分支:

remote master --------
     \   
     Dev ------------------
            \-----task1  \
                          \---task2
Run Code Online (Sandbox Code Playgroud)

当主人得到更新时,我在主人身上重新开始.什么是管理分支task1和task2的最佳方式.他们仍在继续努力.重新分配每个任务分支似乎是我能看到的唯一方式.

Von*_*onC 6

首先尝试使用rebase dev,同时保留合并:

git checkout Dev
git rebase --preserve-merges master
Run Code Online (Sandbox Code Playgroud)

这应该使task1和2也正确地重新定位.

请参阅" 到底是什么混帐的' rebase --preserve-merges’做(为什么?) "


Ber*_*t F 5

如果你有很多任务分支,那么我能想到的最好的办法就是临时将它们与 Dev 合并到临时分支中,然后使用 --preserve-merges 将 temp 重新设置为 master 。然后将分支标签重置到正确的位置。

$ git checkout -b temp Dev && git merge task1 task2
$ git rebase master --preserve-merges
$ git checkout Dev   && git reset --hard temp^
$ git checkout task1 && git reset --hard temp^2
$ git checkout task2 && git reset --hard temp^3
$ git branch -D temp
Run Code Online (Sandbox Code Playgroud)

它仍然有很多命令,但是:

  1. 由于树本质上是被保留的,因此它使您不必手动重建图,即,由于必须将每个任务分支移植到重新定位的 Dev 分支的正确相应提交上,从而减少了人为错误。只需将开发和任务分支标记重置到正确的父提交上即可,这对应于它们在章鱼合并中使用/命名的顺序。

  2. 如果您必须经常做这种事情,那么编写脚本并用作别名应该很简单。