如何在分支上进行rebase并推进该分支指针

时间:2013-07-01 17:38:41

标签: git git-rebase

有没有办法在一个命令中使用rebase并向前移动分支?我正在尝试检查$ DESTINATION时运行以下内容:

git rebase --no-ff --interactive --onto "$DESTINATION" "$IMPORT_BEGIN" "$IMPORT_END"

但在完成之后,我最终处于一个独立的头状态。有没有什么方法可以让我有一个类似于挑选范围的结果 - 也就是说当它完成让$ DESTINATION指向最后一个重新提交的提交时?

1 个答案:

答案 0 :(得分:0)

这应该做你要问的事情:

git checkout $DESTINATION        # assuming here that that's a branch name, not a hash
git cherry-pick $IMPORT_BEGIN..$IMPORT_END

请注意,如果$IMPORT_BEGIN命名您想要挑选的第一个提交,那么您将需要使用${IMPORT_BEGIN}~1 - 与许多其他git命令一样,{{1} }将范围cherry-pick解释为“<begin>..<end>之后的所有提交,包括<begin>”。

如果您事先检查了分支(而不是通过散列检出,导致分离头),那么<end>会自动推进分支头。

编辑:为了使用cherry-pick执行此操作,我们假设您要复制的提交位于名为rebase的分支上(换句话说,devel,而不是哈希 - 使用哈希而不是分支是你最终得到一个分离头的方式),并且你想将这些提交移到$IMPORT_END=devel上。在这种情况下,您可以这样做:

master

这将复制提交,但它不会将git checkout devel git rebase --onto master $IMPORT_BEGIN..$IMPORT_END 分支推进到master的新版本,这似乎是您期望的最终状态。为了实现这一目标,您必须遵循以上内容:

$IMPORT_END

git checkout master git merge --ff-only devel 已由devel更新为指向新提交,rebase现在将merge指向同一位置。