git 将提交拆分为两个分支

lztngnrs  于 2023-03-11  发布在  Git
关注(0)|答案(2)|浏览(303)

我在一个名为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 的新分支上。

rxztt3cl

rxztt3cl1#

这是 * 交互式变基 * 特性的一个很好的用例。
首先运行git branch feature-2,在与当前HEAD相同的提交上创建新的feature-2分支(指向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只包含你想要的提交。
现在运行git checkout feature-2,然后再运行git rebase -i origin/master。你会再次看到所有4个提交,但这次只保留你想要的提交。再次保存文件,你就完成了。

mtb9vblg

mtb9vblg2#

checkout 你想放在新分支下的提交,然后从这里开始创建分支。

git 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,

你只需 checkout 你想要的任何提交(历史中的任何一点),然后在这一点创建分支

如何创建分支?

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

从当前提交创建分支

  • 通过创建分支蚂蚁而不是检查它们

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>

相关问题