2

我有一个功能分支,我想以交互方式基于 master 进行变基,例如:

A - B - C - D (master)
     \
      E - F (feature)

期望的结果是

A - B - C - D (master) - E - F (feature)

在 E 和 F 之后运行一些健全性检查脚本(使用 rebase-todo 文件上的 exec 行)。

但是,如果我转到 magit 的日志缓冲区并r e在 commit 上输入点D,magit 会执行 agit rebase -i D^而不是git rebase -i D,因此该功能的提交会从C. 我想要的是重新定位到大师的尖端,而不是大师^。

所以:

  1. 有没有办法强制 magit 将交互式 rebase 基于D我在日志缓冲区中指向的位置,而不是基于我指向的父级?
  2. magit 似乎没有在非交互式变基中自动附加 ^ 。为什么会出现差异?跨分支交互变基在某种程度上是个坏主意吗?

顺便说一句,我知道有一些解决方法:我可以下拉到命令行;我可以将其拆分为一个分支内交互式 rebase,然后是一个非交互式 rebase;或者我可以在 master 上做一个虚拟提交。它们都不是很方便。我想知道是否有办法一步到位,或者如果没有,是否有一些我应该知道的智慧。

4

1 回答 1

2

在 Git 中,必须在第一次提交之前选择提交。在 Magit 中,必须选择第一个想要变基的提交。就这么简单 - 选择你想要变基的第一个提交。

问:为什么在 Git 中选择“优先提交”之一?

答:因为这FROM..TO就是所有 Git 的解释方式。FROM是排他性和TO包容性的。从“语言”的角度来看,这是有道理的。

问:为什么在 Magit 中不一样?

答:因为考虑到 Magit 的 UI,这没有多大意义。“要选择 X 你必须选择 Y,因为它在 X 之前”有点奇怪。

在某些情况下,这也会使启动变基变得更加困难。例如,状态缓冲区列出未推送的提交。为了以交互方式变基,其中一些提交移至要变基的第一个提交,并且r e. 第一个要变基的提交可能是第一个未推送的提交。如果您必须选择“在那之前”的提交,那么从状态缓冲区中就不容易做到这一点,因为“最后一次推送的提交”不是“尚未推送的提交”的一部分,并且因此没有这样列出。相反,您必须l l在单独的缓冲区中显示完整的日志(),移动到提交,启动变基,然后退出日志缓冲区以返回状态缓冲区,其中正在显示有关正在进行的变基的信息。


此外,您使用错误的命令将一个分支“移植”到另一个分支上。而是使用r r. 如果master正确配置为feature' 上游,那么它将作为分支的默认选择提供,以将当前分支重新定位.

于 2015-12-03T12:29:16.123 回答