Git将提交移入orpan分支

时间:2016-02-17 07:14:51

标签: git

假设:

git init
git commit --allow-empty -m a
git commit --allow-empty -m b
git commit --allow-empty -m c

我有:

$ git log --oneline
<c-sha1> c
<b-sha1> b
<a-sha1> a

我想:

$ git log --oneline master
<c-sha1> c
<a-sha1> a

$ git log --online slave
<?-sha1> b

tried

git checkout --orphan slave
git rebase --keep-empty --onto slave <b-sha1>

1 个答案:

答案 0 :(得分:1)

要创建从属提交,请执行:

git checkout <b-sha1> --orphan slave
git commit -C <b-sha1>

然后要删除旧的b提交,请执行:

git rebase --onto <a-sha1> <b-sha1> master

请注意,如果尚未推送b-sha1,则只能执行第二步,因为您永远不应重写推送提交的历史记录。

另请注意,提交c的快照内容现在会有所不同,因为它不再具有来自commit b的任何更改(从技术上讲,在您的示例中它们不会是,因为您正在做空提交,但如果他们是&#34;真实&#34;提交他们将是)。如果那不是你想要的,那么不要做git rebase --onto,而是做一个交互式的rebase:

git checkout master
git rebase -i <a-sha1>

您的编辑器会弹出如下内容:

pick <b-sha1> Commit message for B
pick <c-sha1> Commit message for C

复制C的提交消息,并将文件的内容更改为:

 r <b-sha1> Commit message for B
 f <c-sha1> Commit message for C

关闭你的编辑器,然后会弹出一个新编辑器,其中包含B的提交消息;将其替换为C的提交消息,然后关闭编辑器。然后你就完成了。