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

bat*_*ato 3 git rebase revert

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

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

所以我有两个分支,包含由不同哈希标记的"相同提交".

A -- B -- C -- D [master]
 \
  E -- F -- G -- H -- I [feature/x]
Run Code Online (Sandbox Code Playgroud)

其中CD分别是相同的提交(衍合)FG特征/ X.

我想删除FGfeature/x维护HI.我该怎么做?

我想恢复提交

git revert F G
Run Code Online (Sandbox Code Playgroud)

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

Use*_*ess 5

最简单的方法是以交互方式进行折扣:结账feature/x,并且做

git rebase -i E
Run Code Online (Sandbox Code Playgroud)

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

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

你也可以做同样的事情

git rebase --onto E G feature/x
Run Code Online (Sandbox Code Playgroud)

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


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

  • 只有当`feature/x`被推入远程存储库时才会@bato. (2认同)