有没有办法在一个命令中同时变基和向前移动分支?我在签出 $DESTINATION 时尝试运行以下命令:
git rebase --no-ff --interactive --onto "$DESTINATION" "$IMPORT_BEGIN" "$IMPORT_END"
但完成后,我最终处于分离的头部状态。有什么办法可以得到类似于挑选该范围的结果 - 也就是说,当它完成以使 $DESTINATION 指向最后一次重新定位提交时?
有没有办法在一个命令中同时变基和向前移动分支?我在签出 $DESTINATION 时尝试运行以下命令:
git rebase --no-ff --interactive --onto "$DESTINATION" "$IMPORT_BEGIN" "$IMPORT_END"
但完成后,我最终处于分离的头部状态。有什么办法可以得到类似于挑选该范围的结果 - 也就是说,当它完成以使 $DESTINATION 指向最后一次重新定位提交时?
这应该可以满足您的要求:
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
将由rebase
to 更新,指向新的提交,merge
现在将master
指向同一个地方。