在magit中,我可以交互式地转换到另一个分支吗?

时间:2015-12-03 10:40:56

标签: rebase magit

我有一个功能分支,我想在master上进行交互式rebase,例如:

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

期望的结果是

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

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

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

所以:

  1. 有没有办法强制magit将交互式rebase基于D,我指向日志缓冲区,而不是指向我指向的父项? / LI>
  2. magit似乎没有在非交互式rebase中自动追加^。为什么会出现差异?交叉分支交互式rebase在某种程度上是个坏主意吗?
  3. 顺便说一句,我知道有一些解决方法:我可以下载到命令行;我可以把它分成一个分支内的交互式rebase,然后是一个非交互式的rebase;或者我可以在master上做一个虚拟提交。他们都不是很方便。我想知道的是,如果有一种方法可以一步到位,或者如果没有,那么我是否应该了解它背后的一些智慧。

1 个答案:

答案 0 :(得分:2)

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

问:为什么选择Git中的“先前提交”?

答:因为这就是所有Git中FROM..TO的解释方式。 FROM是独占的,TO包含在内。从一个有意义的“语言”角度来看。

问:为什么Magit不一样?

答:因为根据Magit的用户界面,这没有多大意义。 “要选择X,你必须选择Y,因为它在X之前出现”有点奇怪。

在某些情况下,这也会使得更难开始变革。例如。状态缓冲区列出未刷新的提交。为了交互式地重新设置其中一些提交,请转移到第一个要重新设置的提交和 r e 。第一个被重新提交的提交可能是第一次未提交的提交。如果你必须在“之前”选择提交,那么从状态缓冲区就不可能轻易实现,因为“被推送的最后一次提交”不是“尚未推送的提交”的一部分,因此未列为此类。相反,您必须在单独的缓冲区中显示完整的日志( ll ),移动到提交,启动rebase,然后退出日志缓冲区以返回状态缓冲区,其中包含有关的信息。正在展示正在进行的变革。

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