【问题标题】:Git move single commit from feature_branch to masterGit 将单个提交从 feature_branch 移​​动到 master
【发布时间】:2014-01-20 11:18:48
【问题描述】:

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

来自:

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

到:

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

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

【问题讨论】:

  • 结果不再遵守顺序?你确定你没有犯错吗?
  • Changeset 1 是在B 之后添加的,它应该如何变成第二张图上的2 之后?真正的任务是什么?
  • 就是这样。我需要从我的功能分支中选择“中间提交”,并以某种方式将其放到主控和变基。

标签: git rebase git-rebase cherry-pick


【解决方案1】:

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

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

这里是“之后”。我会用一个勾号(或“prime”或任何你喜欢的名字)标记它们,因为它们将是原始提交的副本,具有新的和不同的提交 ID。

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

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

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

--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's answer(在我编辑这个时出现),例如:

git branch -f master feature~2

(在这两种情况下,我们都需要将提交命名为 2';对于 git branch,我们必须命名要移动的分支,而对于 git merge,我们必须 on 来移动要移动的分支)。


为了完整起见,这里有一个不同但等效的方法(使用四个 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,因为master 上已经存在提交2'。

【讨论】:

  • 做得很好,很详细,比我自己的回答要详细得多。 +1
【解决方案2】:

主要是:

--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

【讨论】:

  • 这和我需要的一样优雅。谢谢!
【解决方案3】:

您可以从中获取提交哈希

 git reflog

然后转到 master 分支。

git checkout master

然后选择相关的提交

git cherry-pick <commit-hash>

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

【讨论】:

    猜你喜欢
    • 2011-04-12
    • 2014-07-01
    • 2014-10-18
    • 2014-06-07
    • 2013-02-20
    • 1970-01-01
    • 1970-01-01
    • 2012-11-08
    • 1970-01-01
    相关资源
    最近更新 更多