其他提交完成后,从git rebased分支中删除提交

时间:2014-12-15 10:23:49

标签: git rebase revert

我有一个项目有两个分支,名为功能/ x 。在 feature / x 上,我正在处理将在master上合并的新功能。

对于 feature / x 的错误,基于master的rebase操作已完成并被推送。除了其他提交已经完成并推送 feature / x

所以我有两个分支包含由不同哈希标记的“相同提交”。

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

主要上的CD分别与功能/上的FG相同的提交(已更新) X

我想从功能/ x 中删除FG,同时保留HI。我该怎么办?

我正在考虑恢复提交

git revert F G
来自 feature / x

但是那些无用(重复)提交将保留在历史记录中。我想知道是否有更好的方法来做到这一点?

1 个答案:

答案 0 :(得分:5)

最简单的方法是以交互方式进行折扣:结帐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

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


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