我在一个名为feature-1的分支上运行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 的新分支上。
commit <Hash-3>
commit <HASH-2>
rxztt3cl1#
这是 * 交互式变基 * 特性的一个很好的用例。首先运行git branch feature-2,在与当前HEAD相同的提交上创建新的feature-2分支(指向feature-1)。现在运行git rebase -i origin/master,这将打开$EDITOR,如下所示:
git branch feature-2
HEAD
feature-2
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个提交,但这次只保留你想要的提交。再次保存文件,你就完成了。
git checkout feature-2
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>
2条答案
按热度按时间rxztt3cl1#
这是 * 交互式变基 * 特性的一个很好的用例。
首先运行
git branch feature-2
,在与当前HEAD
相同的提交上创建新的feature-2
分支(指向feature-1
)。现在运行
git rebase -i origin/master
,这将打开$EDITOR
,如下所示:删除前两行并保存文件,现在git会重新创建提交,使
feature-1
只包含你想要的提交。现在运行
git checkout feature-2
,然后再运行git rebase -i origin/master
。你会再次看到所有4个提交,但这次只保留你想要的提交。再次保存文件,你就完成了。mtb9vblg2#
checkout 你想放在新分支下的提交,然后从这里开始创建分支。
你只需 checkout 你想要的任何提交(历史中的任何一点),然后在这一点创建分支
如何创建分支?
可以通过多种方式创建分支:
从当前提交创建分支
git branch < branch_name>
如果未指定,则默认SHA-1为***HEAD***
从所选提交创建分支
通过在checkout命令中添加sha-1,你**“设置”了**创建分支的提交。