Split提交成两个分支

时间:2015-07-06 09:52:28

标签: git git-log

我在一个名为feature-1的分支上。我运行git log,它向我展示了一堆提交:

commit <HASH-1>
…
commit <HASH-2>
…
commit <HASH-3>
…
commit <HASH-4>
…

现在我希望commit <Hash-3>旧的提交位于feature-1分支上,而commit <HASH-2>较新的提交为一个名为 feature-2 的新分支。我怎么能这样做?

2 个答案:

答案 0 :(得分:3)

检查您希望在新分支下的提交,然后从此处创建分支。

got log --oneline ...

commit <HASH-1>
commit <HASH-2>
commit <HASH-3>
commit <HASH-4>


git checkout -b feature-1 <HASH-3> 
git checkout -b feature-2 <HASH-2> 

and so on,

您只需检查您想要的任何提交(历史记录中的任何一点),然后在此处创建分支

如何创建分支?

可以通过多种方式创建分支:

从当前提交创建分支

  • 通过创建分支ant而不检查它们 git branch < branch_name>

  • 通过创建并切换到新分支

    git checkout -b <branch_name>
    git checkout -t <branch_name>
    

如果未指定,则默认SHA-1为 HEAD

从所选提交创建分支

通过在checkout命令中添加sha-1,您“设置”将从中创建分支的提交。

    git checkout -b <branch_name> <sha-1>
    git checkout -t <branch_name> <sha-1>

答案 1 :(得分:2)

这是交互式rebase 功能的绝佳用例。首次运行%*c。这将在与您当前的git branch feature-2(指向feature-2)相同的提交上创建一个新分支HEAD

不,您只运行feature-1。这样会打开您的git rebase -i origin/master,如下所示:

$EDITOR

现在,您只需要删除前两行,那么就只剩下pick 3182a77e Commit 1 pick 6f717613 Commit 2 pick f30c1e92 Commit 3 pick b1c13f14 Commit 4 中您想要的提交了。然后只需保存文件。现在git将重新创建提交,以便feature-1包含所需的提交。

不是,您先运行feature-1,然后再运行git checkout feature-2。您将再次看到所有4个提交,这次只是将您想要的提交保留在git rebase -i origin/master中。然后再次保存文件就可以了。