【问题标题】:Git: move a commit "on top"Git:将提交“移到顶部”
【发布时间】:2013-01-08 13:45:09
【问题描述】:

假设在master 我禁用了一项功能。 我在分支feature 上处理该功能,所以我在那里有一个特殊的提交$,它只是启用了该功能。 现在我想将我在feature 中所做的更改合并到master,但保留启用提交。所以就像

main:    A--B--X--Y
feature: A--B--$--C--D

假设我想这样做,通过将 $ 提交移到功能顶部:

new feature: A--B--C--D--$

我该怎么做呢?

【问题讨论】:

  • 为什么提到主分支?您完全是在询问功能分支,对吗?

标签: git branch git-rebase


【解决方案1】:

如果您想在feature 上保持相同的提交顺序,您应该创建一个新分支并执行以下操作。否则只需在 feature 上执行此操作

git rebase -i <sha for commit B>

将提交 $ 移动到列表底部

git checkout master
git rebase feature <or the other branch name>

我不清楚这个问题,但如果你根本不想要 $,而不是移动它,在 git rebase -i 之后删除它虽然你会想在一个新分支上这样做,所以你不要'不要失去它。因为你正在改变历史。

这也假设分支feature 没有被推送到远程,因为重写历史记录不好。

【讨论】:

  • 第一个变基是做什么的?为什么我必须将 rebase 应用于 B 而不是 $?第一次变基后的状态是什么?
  • 你为什么要检查主分支?最初的问题是修改功能分支,保持主分支不变。
  • @FrankPuck 第一个变基可以让您重新排序提交。您将 sha 用于 B,因为它是第一个不需要触摸的。当您重新排序提交时,所有其他提交的 SHA 将更改 (iirc)。至于第二次结帐,不确定(我在 8 年前回答过)。我认为这也是为了将提交提交给 master。
【解决方案2】:

git rebase -i B,然后将$ 移动到编辑器中显示的列表的末尾。它将作为打开文件的第一行开始。您也可以完全删除该行,这只会将该提交从您的分支历史记录中删除。

【讨论】:

  • 很酷,谢谢!现在很清楚我应该使用 rebase,出于某种原因,我一直在尝试用cherry-picks 解决它。
  • @AdrianPanasiuk,您也可以使用cherry-pick,但可能会更加努力。
  • 你也可以使用git rebase -i $~1,相当于$~1$之前的提交,也就是B
  • unclear: "然后将 $ 移到列表的末尾" -- 我在这里问如何做到这一点!
  • 只需在编辑器中移动该行,但这恰好适用于您的配置。
猜你喜欢
  • 2021-04-02
  • 2012-11-08
  • 2018-05-21
  • 1970-01-01
  • 2019-07-28
  • 1970-01-01
  • 1970-01-01
  • 2017-05-18
  • 2011-04-12
相关资源
最近更新 更多