在其他提交完成后从git rebase分支中删除提交

3

我有一个项目,其中有两个分支,分别命名为masterfeature/x。在feature/x分支上,我正在开发新的功能,将在主分支上合并。

因为在feature/x分支上出现错误,基于主分支进行了重新派生操作并推送。此外,在feature/x分支上还进行了其他提交并推送。

所以我有两个包含“相同提交”的分支,其哈希值不同。

A -- B -- C -- D [master]
 \
  E -- F -- G -- H -- I [feature/x]

主分支上,CD分别是rebase后的FG。现在我想从feature/x中删除FG,保留HI,应该怎么做呢?

我打算撤销提交。

git revert F G

来自 feature/x 分支,但那些无用的(重复的)提交将保留在历史记录中。我想知道是否有更好的方法?


你不应该像这里所做的那样在左侧标记你的分支;请参阅我的此答案开头的内容。 - jub0bs
1
@Jubobs 完成了,谢谢。 - bato
1个回答

5
最简单的方法是进行交互式 rebase :检出 feature/x,然后执行以下操作:
git rebase -i E

然后只需从提示你编辑的rebase脚本中删除F、G行。这将使你的分支看起来像:

master   -> A -- B -- C -- D
                  \
feaure/x ->        E -- H' -- I'
                    \
(orphaned)           F -- G -- H -- I

您可以使用相同的方法

git rebase --onto E G feature/x

但是交互式方法更容易记忆(我不得不在在线帮助中查找参数顺序)。


请注意,旧的提交仍然存在并且可以恢复,但如果没有任何引用它们,它们最终将被垃圾回收。


2
只有当feature/x被推送到远程仓库时,才会@bato。 - Sascha Wolf
@Zeeker 是的,确实是 :( - bato
1
在这种情况下,请记住它也会影响从远程仓库_pull_的所有人。 - Useless
@Useless 是的,我知道。幸运的是只有另一个人在处理它。 - bato

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接