繁体   English   中英

从先前的git分支中删除预先提交的提交

[英]Remove prepended commits from previous git branch

在项目上工作时,我们在分支之间进行更改时弄乱了同步。 最初,有一个功能分支foo ,该分支已重新建立到master的位置,但是本地master并未同步,因此,当移至新分支bar ,来自前一个分支的所有提交也都将添加到新分支。 git树看起来像这样:

Master =>  A--B--C--D--E--Merge
               \-C--D--E-/-F--G--H   <= Bar
                  Foo

我的目标是完全删除foo ,因为它已经重新建立了master的基础,并且具有类似以下内容:

Master =>  A--B--C--D--E
                        \-F--G--H    <=Bar

编辑:

因此,这似乎比我教的更混乱。 另外,我不是很精通git,甚至无法得出确切的结论。 我将尽可能详细地介绍。

我和队友正在做一个项目。 为了实现一个功能,我们创建了一个单独的分支foo

A -- B <-- (master)
      \
       C -- D -- E <-- (foo)

完成该功能后,我将foo重新设置为master 现在这棵树看起来像这样:

A -- B -- C -- D -- E <-- (master)

需要实现新功能,因此打开了新的分支bar

A -- B -- C -- D -- E <-- (master)
                     \
                      F -- G -- H <-- (bar)

这一切都在我身上。 现在,队友推送了他的代码,我想他没有同步某些分支,并且还存在一些需要合并的冲突,但是最后,git树如下所示:

A -- B -- C -- D -- E <-- (master)
      \             | \
       C -- D -------- M1 ------ M2 -- I <-- (bar)
                    \           /
                     F -- G -- H

哪里:

  • M1声明:将master合并为foo
  • M2说:将bar合并为foo
  • I是新队友的承诺

另外,我对M2中的消息感到有些困惑,因为这意味着最后我们只剩下foo ,但是我们的树只有bar

我确实尝试过,如@Mark Adelsberger建议的那样,运行git rebase master bar ,但是我立即在commit C上发生合并冲突,并且中止了rebase。 根据答案,它应该自动确定这两个C是相同的提交,并跳过它们,但这不是事实。

我的目标是在可能的情况下展平树,这意味着除去bar分支中的CD ,并希望将FGH合并或置于与M1M2I相同的行中。

回到问题,我发现我的第一篇文章缺乏很多细节。 希望此编辑可以阐明我面临的问题。

因此,尽管@Mark Adelsberger的答案不能完全解决问题,但确实向我展示了研究方向。

做一个简单的git rebase master bar并没有做,因为我立即在提交C上遇到了冲突。 由于提交是重复的,因此应该不会发生,并且应该已跳过。

但是,执行git rebase -i master bar确实有帮助,因为我可以手动排除提交CD 最重要的是,它还摆脱了M1M2 ,使日志更加美观。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM