我有一个项目有两个分支,名为主和功能/ x 。在 feature / x 上,我正在处理将在master上合并的新功能。
对于 feature / x 的错误,基于master的rebase操作已完成并被推送。除了其他提交已经完成并推送 feature / x 。
所以我有两个分支包含由不同哈希标记的“相同提交”。
A -- B -- C -- D [master]
\
E -- F -- G -- H -- I [feature/x]
主要上的C
和D
分别与功能/上的F
和G
相同的提交(已更新) X
我想从功能/ x 中删除F
和G
,同时保留H
和I
。我该怎么办?
我正在考虑恢复提交
git revert F G
来自 feature / x 的但是那些无用(重复)提交将保留在历史记录中。我想知道是否有更好的方法来做到这一点?
答案 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
但是交互式方法更容易记住(我必须在在线帮助中查找参数顺序)。
请注意,旧提交仍然存在,并且可以恢复,但如果没有任何引用它们,最终将被垃圾收集。