繁体   English   中英

Git将feature_branch中的单个提交移动到master

[英]Git move single commit from feature_branch to master

实现这一目标的最简单方法是什么?

从:

--A--B         
      \
       1--2--3 

至:

--A--B--2
         \
          1--3

我无法想出任何简单的方法来实现这一点(少于5步)。

你遗漏了标签; 让我们把它们放回去。这里是“之前”:

--A--B          <-- master
      \
       1--2--3  <-- feature

这里是“之后”。 我将使用刻度标记(或“素数”或任何您喜欢称之为的标记)来标记这些标记,因为它们将是原始提交的副本,具有新的和不同的提交ID。

--A--B--2'      <-- master
         \
          1'-3' <-- feature

这不能一步完成:至少需要两次。

首先,我们必须重新排序1--2--3序列,以便2首先出现。 最简单的方法可能是交互式rebase(在分支feature ,使用git命令git rebase -i master ):只需更改pick顺序,rebase将选择2,然后是1,然后是3并移动feature标签:

--A--B          <-- master
      \
       2'-1'-3' <-- feature

现在我们只需要移动master标签指向提交2' 许多命令都会这样做,但最简单的是git merge指示进行快进合并(以避免错误):

git checkout master; git merge --ff-only feature~2

为了避免检查master我们可以使用git branch -f就像在VonC的回答中一样 (在我编辑这个时出现),例如:

git branch -f master feature~2

(在这两种情况下我们都需要命名提交2' ;使用git branch我们必须命名要移动的分支,而使用git merge我们必须要移动的分支上)。


为了完整起见,这是一个不同但等效的方法(使用四个git命令)。 首先让我们来分支master

git checkout master

现在我们可以挑选提交2 ,创建副本, 2'

git cherry-pick feature^     # or feature~1

生成此图表:

--A--B--2'      <-- master
      \
       1--2--3  <-- feature

现在,我们可以变基feature交互到新master ,下探承诺2

git checkout feature
git rebase -i master

pick行更改为副本1和3并省略2,因为提交2'已存在于master

主要是:

--A--B         (master)
      \
       1--2--3 (B)



git checkout B
git rebase -i master # reorder commits

--A--B         (master)
      \
       2--1--3 (B)

git branch -f master 2

你可以从中获取提交哈希

 git reflog

然后去主分公司。

git checkout master

然后樱桃挑选相关提交

git cherry-pick <commit-hash>

如果没有冲突,则提交将应用于主分支。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM