0

有没有办法在一个命令中同时变基和向前移动分支?我在签出 $DESTINATION 时尝试运行以下命令:

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

但完成后,我最终处于分离的头部状态。有什么办法可以得到类似于挑选该范围的结果 - 也就是说,当它完成以使 $DESTINATION 指向最后一次重新定位提交时?

4

1 回答 1

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命令一样,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将由rebaseto 更新,指向新的提交,merge现在将master指向同一个地方。

于 2013-07-01T21:02:31.160 回答