gpt4 book ai didi

Git 将单个提交从 feature_branch 移​​动到 master

转载 作者:太空狗 更新时间:2023-10-29 13:06:10 27 4
gpt4 key购买 nike

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

来自:

--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 order 和 rebase 将 cherry-pick 2,然后 1,然后 3 并移动 feature 标签:

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

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

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

为了避免 checkout master,我们可以使用 git branch -f,如 VonC's answer (在我编辑这篇文章时出现),例如:

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 交互地 rebase 到新的 master 上,删除提交 2:

git checkout feature
git rebase -i master

更改 pick 行以复制 1 和 3 并省略 2,因为提交 2' 已经在 master 上。

关于Git 将单个提交从 feature_branch 移​​动到 master,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21232614/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com