[英]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.