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

How to split a branch in two with Git?

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

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

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

我有这个:

master ───●──●──●──●──●──●──●──●──●──●
              \                    
               \                   
        feature ●──●──●──●──●──●──●
                         ▲         
                         │         
                    split here         

我希望这样:

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

您可以在您的 feature 分支中检查您希望新的 feature-test 分支开始的确切提交。然后从该提交创建一个名为 feature-test 的新分支:

git checkout <sha1 in feature>
git checkout -b feature-test

要在 feature 分支中获取所需提交的 SHA-1 哈希,您可以使用 git log 并找到所需的提交。该条目将如下所示:

commit 408d94384216f890ff7a0c3528e8bed1e0b01621
Author: Yadomi <yadomi@somewhere.com>
Date:   Tue Mar 11 18:10:52 2015 -0700

如果你想用一个 Git 命令完成同样的事情,你也可以尝试以下方法:

git checkout -b feature-test 408d94384216f890ff7a0c3528e8bed1e0b01621

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

第一步是创建 feature_test 其中 feature 是:

git checkout feature
git checkout -b feature-test

但是你需要将feature重置为<sha1 split here>:

git checkout feature
git reset --hard <sha1 split here>

请注意,如果您已推送 feature,则需要执行 git push --force
对于可能已经从 origin/feature.

撤出的其他合作者来说,这可能会带来不便

另一个未提及的选项(现在为时已晚但下次)不要一次提交所有更改并使用 hunks。

您可以通过在添加命令中使用 -p 标志来完成。 git add -p然后只添加你需要的,创建第二个分支并提交其余部分。

澄清一下:git 添加 -p 让您选择要添加哪些更改以提交,而不选择特定的提交。


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