如何将分支中的提交移动到GIT中的另一个新分支?

Eki*_*bal 4 git git-branch

我为我的工作开发了 git branch,我创建了一个名为feature1的新分支,并提交了1,2,3和4.

我需要将commit 3,4从feature1分支移动到新创建的分支feature2.

应该从feature1中删除提交3,4 并将其添加到新的分支feature2,因此最终结果应该是feature1 with 1和2 branch以及feature2 with 3和4.

请注意,目前我已开发设有1个分支机构.feature2尚未添加.

实现这一目标的最佳方法是什么?我尝试了git cherry-pick但是想确保最好的方法.

jub*_*0bs 6

如果我理解你的描述正确,你的回购目前看起来像这样,

... -- o [develop]
        \ 
         1 -- 2 -- 3 -- 4 [feature1]
Run Code Online (Sandbox Code Playgroud)

而你希望它看起来像那样

         3'-- 4'[feature2]
        /
... -- o [develop]
        \
         1 -- 2 [feature1]
Run Code Online (Sandbox Code Playgroud)

正确?如果是这样,请执行以下操作.

首先,确保您处于干净的工作状态.然后,创建并签出一个名为的分支feature2,该分支指向同一个提交develop:

git checkout -b feature2 develop
Run Code Online (Sandbox Code Playgroud)

您的回购将如下所示.

... -- o [HEAD=feature2,develop]
        \ 
         1 -- 2 -- 3 -- 4 [feature1]
Run Code Online (Sandbox Code Playgroud)

Cherry挑选两个感兴趣的提交(34):

git cherry-pick <commit-ID-of-3> <commit-ID-of-4>
Run Code Online (Sandbox Code Playgroud)

之后,您的仓库将如下所示.

         3'-- 4'[HEAD=feature2]
        /
... -- o [develop]
        \ 
         1 -- 2 -- 3 -- 4 [feature1]
Run Code Online (Sandbox Code Playgroud)

最后,检查你的feature1分支并将其重置为两次提交:

git checkout feature1
git reset --hard HEAD~2
Run Code Online (Sandbox Code Playgroud)

您的回购将按预期结束,

         3'-- 4'[feature2]
        /
... -- o [develop]
        \
         1 -- 2 [HEAD=feature1]
Run Code Online (Sandbox Code Playgroud)

你将处于一个干净的工作状态.