我有一个看起来像这样的 git dag:
* commit A - main
|
| * commit B - branch1
| |
| * commit C - branch2
| |
| * commit D
|/
* commit E (this is the old main I worked on top of)
我最初在提交 E 的基础上工作,其中
main
曾经是,但后来我的同事进行了一些更新,main
得到了另一个提交,提交 A。
我有两个分支,
branch1
和branch2
,它们描述单独的更改,但是branch1
取决于branch2
中所做的更改,所以我想将branch1
保留在branch2
之上。
由于我的同行所做的更新,我想在新的
main
提交之上重新设置分支 1 和分支 2。也就是说,我想将提交 B、C 和 D 变基到 A 之上。但是,我想将 branch1
保持在 branch2
之上,并且最好在不强制移动分支的情况下执行此操作。
最简单的方法是
$ git checkout branch1
$ git rebase main
$ git checkout HEAD~ # move back one commit to where branch2 should be
$ git branch -f branch2 # force branch2 to be just before branch1
但这很容易出错。是否有 git-rebase (或其他方法)的标志可以对分支进行变基,同时保留中间提交的所有分支标签?
您想使用
branch1
选项重新设置 --update-refs
的基数:https://git-scm.com/docs/git-rebase#Documentation/git-rebase.txt---update-refs
自动强制更新任何指向正在重新确定基础的提交的分支。在工作树中签出的任何分支都不会以这种方式更新。
所以使用命令:
$ git checkout branch1
$ git rebase --update-refs main