Git:移动提交;“在上面”;

Git:移动提交;“在上面”;,git,branch,git-rebase,Git,Branch,Git Rebase,假设在master中,我禁用了一个功能。 我在branchfeature上处理该功能,因此我有一个特殊的commit$来启用该功能。 现在,我想将我在功能中所做的更改合并到主程序中,但保留启用提交。所以就像 main: A--B--X--Y feature: A--B--$--C--D 假设我想这样做,将$提交移到功能的顶部: new feature: A--B--C--D--$ 我该怎么做呢?git-rebase-ib,然后将$移动到编辑器中显示的列表的末尾。它将作为打开的文件中的第

假设在
master
中,我禁用了一个功能。 我在branch
feature
上处理该功能,因此我有一个特殊的commit
$
来启用该功能。 现在,我想将我在
功能中所做的更改合并到
主程序中,但保留启用提交。所以就像

main:    A--B--X--Y
feature: A--B--$--C--D
假设我想这样做,将
$
提交移到功能的顶部:

new feature: A--B--C--D--$

我该怎么做呢?

git-rebase-ib
,然后将
$
移动到编辑器中显示的列表的末尾。它将作为打开的文件中的第一行开始。您也可以完全删除该行,这将从分支的历史记录中删除该提交。

如果您希望在
功能上保持提交的顺序相同,您应该创建一个新分支并执行以下操作。否则,只需在
功能上执行此操作

git rebase -i <sha for commit B>
git-rebase-i
将commit$移到列表的底部

git checkout master
git rebase feature <or the other branch name>
git签出主机
git重基特性
我不清楚这个问题,但是如果你根本不想要$1,而不是移动它,那么在
git rebase-i
之后删除它,尽管你会希望在一个新的分支上这样做,这样你就不会丢失它。因为你正在改变历史


这还假设分支
功能
未被推送到远程,因为重写历史记录是错误的

很酷,谢谢!现在很清楚我应该使用rebase,出于某种原因,我以前一直试图用cherry pick来解决这个问题。@AdrianPanasiuk,你也可以使用cherry pick,但这可能需要更多的努力。你也可以使用
git rebase-I$~1
,这相当于
$~1
$
之前的提交,哪个是
B