如何使用Git将分支一分为二?

如何使用Git将分支一分为二?,git,split,branch,rebase,cut,Git,Split,Branch,Rebase,Cut,我从master创建了一个feature分支,然后在某个时候意识到从这个分支开始一个新分支会更好 那么,如何在特定提交时将分支一分为二 让我用这个小模式来解释: 我有这个: master ───●──●──●──●──●──●──●──●──●──● \ \ feature ●──●──●──●──●──●──●

我从
master
创建了一个
feature
分支,然后在某个时候意识到从这个分支开始一个新分支会更好

那么,如何在特定提交时将分支一分为二

让我用这个小模式来解释:

我有这个:

master ───●──●──●──●──●──●──●──●──●──●
              \                    
               \                   
        feature ●──●──●──●──●──●──●
                         ▲         
                         │         
                    split here         
我希望:

master ───●──●──●──●──●──●──●──●──●──●   
              \                       
               \                      
        feature ●──●──●──●            
                          \           
                           \          
              feature-test  ●──●──●

您可以在
功能
分支中签出确切的提交,您希望新的
功能测试
分支从那里开始。然后从该提交创建一个名为
功能测试
的新分支:

git checkout <sha1 in feature>
git checkout -b feature-test
如果您只想用一个Git命令完成相同的任务,还可以尝试以下操作:

git checkout -b feature-test 408d94384216f890ff7a0c3528e8bed1e0b01621

在这里,我使用了示例Git日志中的SHA-1 has,但是您可以用您需要的任何内容替换它。

第一步是创建
功能测试
,其中
功能是:

git checkout feature
git checkout -b feature-test
但您还需要将
功能
重置为

git checkout feature
git reset --hard <sha1 split here>
git签出功能
git重置——硬
请注意,如果您已经按下了
功能
,则需要执行
git push--force


对于其他可能已经从
origin/feature

中提取了另一个没有提到的选项(现在已经太迟了,但下次再提)的合作者来说,这可能会很不方便,他们不会一次提交所有更改并使用hunks

您可以使用add命令中的
-p
标志来执行此操作
gitadd-p
然后只添加所需内容,创建第二个分支并提交其余部分

只是想澄清一下:GitAdd-p允许您选择添加哪些更改以提交,而不是选择特定的提交



如果您需要选择不在单个范围内的提交,则可以使用
git cherry pick
选择特定的提交。

谢谢!所以现在我有了一个很好的基础,完成了我的
特性测试
,但是408d943842之后的每一次提交。。。(例如)不存在并停留在
feature
分支中。如何移动这些提交?非常感谢,
git reset硬
功能
中撤销提交缺少的内容。我独自一人在这个分支上,所以除非我推了
origin/feature
Haha:)谢谢@VonC!我正在努力学习git的每一部分,并为它们制作教程。我认为这不是正确(或完整)的答案。在运行第一个命令后,新创建的分支上“拆分”后的所有提交都将丢失。在硬重置前一个分支后,所有提交都将丢失。这不是作者要求的。@kalamar好的。我已经确定了答案。
git checkout feature
git reset --hard <sha1 split here>