Rebase不改变内容

时间:2013-09-12 18:10:21

标签: git git-rebase

git rebase是否有一个简单的选项说:“重写此历史记录,自动解决所有冲突,使得在rebase之后HEAD的内容将保持不变它现在是“?

我有一个功能分支,我已合并到主人;基本上我想重做那个作为主人的基础。

我认为-X ours可能是那个选项,但结果却是不同的内容。

1 个答案:

答案 0 :(得分:2)

据我了解,你想要的并不完全是合并或变基。这更像是一个切入点。您已将master合并到您的功能中,因此您知道您希望生成的树是什么。

用git术语来说,这意味着您希望新提交使用与功能分支头相同的树。假设您的功能分支名为my-feature,那么您可以使用my-feature^{tree}直接处理该提交的树根。

您需要一个新的提交,其父级是您的父级,其树重用已存在于您的存储库中的一个。管道命令git commit-tree可让您实现这种精细控制。

$ git checkout master
$ git merge --ff-only \
  $(git commit-tree my-feature^{tree} -p $(git rev-parse master) -m FIXME)
$ git commit --amend -C $(git rev-parse my-feature)

git commit-tree的输出是新提交的SHA1。 git merge命令捕获SHA1并将其合并到本地主服务器。 --ff-only是一种故障保险并表达我们的意图。由于将master命名为-p的父级,新提交将是一个快速构建。

-C的{​​{1}}选项允许您重用来自另一个提交的提交消息,在上述情况下是您的功能分支的负责人。