我在一个名为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 的新分支。我怎么能这样做?
答案 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
中。然后再次保存文件就可以了。