在 magit 中,我可以交互式地变基到另一个分支上吗?



我有一个功能分支,我想在master上交互式地重新定位,例如:

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

期望的结果是

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

在 E 和 F 之后运行一些健全性检查脚本(在变基待办事项文件上使用执行行(。

但是,如果我转到 magit 的日志缓冲区并使用提交D上的点键入 r e,magit 执行git rebase -i D^而不是git rebase -i D,因此该功能的提交将从C重放。 我想要的是重新定位到主人的尖端,而不是主人^。

所以:

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

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

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

问:为什么其中一个在 Git 中选择"先前提交"?

答:因为这就是 Git 中对FROM..TO的解释。 FROM是排他性的,TO包容的。从"语言"的角度来看,这是有道理的。

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

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

在某些情况下,这也会使开始变基变得更加困难。 例如,状态缓冲区列出了未推送的提交。为了交互式地变基其中一些提交,请移动到要重定基址的第一个提交和 r e。要重定基址的第一个提交可能是第一个未推送的提交。如果必须选择"在此之前"提交,那么从状态缓冲区中不容易实现,因为"上次推送的提交"不是"尚未推送的提交"的一部分,因此未列出。相反,您必须在单独的缓冲区中显示完整的日志 (l l(,移动到提交,启动变基,然后退出日志缓冲区以返回到状态缓冲区,其中显示了有关正在进行的变基的信息。


此外,您使用了错误的命令将一个分支"移植"到另一个分支上。而是使用 r r。如果master被正确配置为feature的上游,那么这将作为分支的默认选择来重新定位当前分支。

最新更新