30

假设我有一个主题分支,我想重写它的整个历史,因为它最初是从 master 为拉取请求创建的。git log无论出于何种原因,使用它来确定我想要传递给的提交哈希并不容易或显而易见

git rebase -i <commit>

我知道我可以使用它git merge-base <branch1> <branch2 || master>来查找两个引用可以追踪其祖先的提交,并可以使用它来确定提交。我想知道的是,是否有比使用更好的方法来交互式地重新设置整个分支(无论 master 是否先进)

git rebase -i `git merge-base my_branch master`

编辑:我不想更改在此分支上进行的第一次提交的父级,因此git rebase -i master只有在创建分支后两个 master 都没有前进并且分支是从当前指向的提交 master 创建的情况下才有效。

4

2 回答 2

23

也许我误解了你的问题,但我认为git rebase -i master应该做你想做的。它将找出合并基础并将整个分支从该点重新设置为当前 HEAD,以便它看起来是从 master 的当前尖端分支的。

此外,如果 master 没有进阶,那么 rebase 几乎是无操作的。

于 2012-05-02T16:31:03.507 回答
2

我只发现对您列出的命令的一项迭代改进。你的命令:

git rebase -i `git merge-base my_branch master`

一个改进是不必记住要变基的分支的名称。假设您当前位于要变基的分支上(根据我的经验,这几乎总是如此),您可以使用:

git rebase -i `git merge-base HEAD master`
于 2020-09-15T16:01:59.320 回答