【问题标题】:Remove prepended commits from previous git branch从以前的 git 分支中删除前置提交
【发布时间】:2018-12-05 09:12:45
【问题描述】:

在处理一个项目时,我们在分支之间更改时搞砸了同步。起初有一个功能分支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,但我在提交C 时立即遇到了合并冲突,因此我中止了rebase。根据答案,它应该自动确定这两个 Cs 是相同的提交,并跳过它们,但事实并非如此。

如果可能的话,我的目标是把树弄平,意思是去掉bar分支中的CD,并希望合并或将FGH放在同一个分支中行为M1M2I

回到这个问题,我发现我的第一篇文章缺乏很多细节。希望此编辑将澄清我面临的问题。

【问题讨论】:

    标签: git branch git-branch branching-and-merging


    【解决方案1】:

    所以,虽然@Mark Adelsberger 的回答并没有完全解决这个问题,但它确实为我指明了一个研究方向。

    做一个简单的git rebase master bar 并没有这样做,因为我在提交C 时立即遇到了冲突。这不应该发生,因为提交是重复的,应该被跳过。

    但是,执行 git rebase -i master bar 确实有帮助,因为我可以手动排除提交 CD。最重要的是,它还去掉了M1M2,做一个漂亮干净的日志。

    【讨论】:

      猜你喜欢
      • 2022-10-15
      • 2017-09-11
      • 2011-02-18
      • 2017-01-24
      • 1970-01-01
      • 1970-01-01
      • 2014-11-25
      • 2020-05-07
      相关资源
      最近更新 更多