我有一个功能分支,我想在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
重播。我想要的是重新加入主人的尖端,而不是主人^。
所以:
D
,我指向日志缓冲区,而不是指向我指向的父项? / LI>
答案 0 :(得分:2)
在Git中,必须在第一个想要重新提交的提交之前选择提交。在Magit中,必须选择第一个想要改变的提交。就这么简单 - 选择你想要重新设置的第一个提交。
问:为什么选择Git中的“先前提交”?
答:因为这就是所有Git中FROM..TO
的解释方式。 FROM
是独占的,TO
包含在内。从一个有意义的“语言”角度来看。
问:为什么Magit不一样?
答:因为根据Magit的用户界面,这没有多大意义。 “要选择X,你必须选择Y,因为它在X之前出现”有点奇怪。在某些情况下,这也会使得更难开始变革。例如。状态缓冲区列出未刷新的提交。为了交互式地重新设置其中一些提交,请转移到第一个要重新设置的提交和 r e 。第一个被重新提交的提交可能是第一次未提交的提交。如果你必须在“之前”选择提交,那么从状态缓冲区就不可能轻易实现,因为“被推送的最后一次提交”不是“尚未推送的提交”的一部分,因此未列为此类。相反,您必须在单独的缓冲区中显示完整的日志( ll ),移动到提交,启动rebase,然后退出日志缓冲区以返回状态缓冲区,其中包含有关的信息。正在展示正在进行的变革。
此外,您使用错误的命令将分支“移植”到另一个分支上。而是使用 r r 。如果master
已正确配置为feature
的上游,那么这将作为分支的默认选择,以将当前分支重新绑定到。