有没有办法在一个命令中使用rebase并向前移动分支?我正在尝试检查$ DESTINATION时运行以下内容:
git rebase --no-ff --interactive --onto "$DESTINATION" "$IMPORT_BEGIN" "$IMPORT_END"
但在完成之后,我最终处于一个独立的头状态。有没有什么方法可以让我有一个类似于挑选范围的结果 - 也就是说当它完成让$ DESTINATION指向最后一个重新提交的提交时?
答案 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
指向同一位置。