【问题标题】:How can I drop commits in the git log if it isn't letting me?如果它不让我,我如何在 git log 中删除提交?
【发布时间】:2021-07-30 20:53:46
【问题描述】:

我正在尝试删除和移除图片中突出显示的提交。但是,当我进行交互式 rebase 并删除提交时,它只会使链变得更加复杂。如果没有我突出显示的那些,我怎么能有一行提交?顺便说一句,一些提交可能具有相同的消息,但它们的源代码完全不同。请建议 gitkraken 和 CLI git 解决方案。

这是我正在寻找的图表 编辑 这是更新的图表

【问题讨论】:

  • 我分不清你们两位大师的区别。我假设其中一个是远程分支?
  • 交互式变基是怎么做的。如果您对正在做的事情有疑问,请显示您的代码和结果。请注意,交互式 rebase 必然重复所有后续提交,因此,如果您担心的是,您可以停止担心。
  • @xdhmoore 是的,其中一个是本地文件,另一个是远程文件
  • @matt ive 尝试删除我突出显示的提交,但它不允许我这样做。就像我想完全删除它们并将所有东西合并到主分支内的一侧。
  • 我不知道这些话是什么意思。也许你可以画出你想要的历史图表。

标签: git github gitkraken


【解决方案1】:

要知道的事情:origin/master(你图中的第二个主人)不是你的。它是 remote-tracking 分支,它唯一的工作就是反映 GitHub 上的内容。它实际上是您获取/拉动和推动的媒介。您根本无法直接编辑远程跟踪分支origin/master。不过,真正的master 是你的。

所以你需要做的第一件事就是将这些提交放到一个真正的分支上,我们不妨使用master 本身作为真正的分支:

  1. 在master,建立一个新的分支来占据你的位置;我们就叫它temp吧。

  2. 现在,仍然在master 上,执行reset --hard 直到“删除控制台日志记录”(图中较高的那个)。我们故意跳过了不需要的合并提交,因此稍后将与其他“已删除的控制台日志记录”一起根除。

好的,现在您想要重新洗牌的所有早期提交都在 master 上,我们可以进行重新洗牌:

  1. 从“广播输入”开始重新设置交互式基础,并删除“用户输入”。

  2. 现在git cherry-pick temp,然后强制删除temp 分支;你不再需要它了。

现在master 看起来就是你想要的样子!

所以现在您可以推送,从而将远程跟踪origin/master 与它协调一致;但是你将不得不使用武力,因为你已经改写了历史。如果您与其他人共享此分支,这会产生严重(可能是灾难性的)后果,但这些后果隐含在所提出的问题中,我们无能为力。

这个故事的真正寓意是,在你的历史真的是你想要的方式之前,不要推主分支。如果您不知道您的历史是否已确定,请使用更多分支进行实验,直到您确实知道为止。不得不重写你已经推送到 GitHub 的内容是一种非常糟糕的气味,并且表明你的工作习惯不正确。

【讨论】:

  • 好的,现在我有一个临时和主分支指向合并提交。当我进行硬重置时,它所做的就是移动我的 HEAD 并分支到“删除控制台日志记录”。合并提交仍然有效。我更新了图片以显示
  • 是的,不过不用担心,当我们最后强制推送时,它会被遗忘。
  • 这是在我硬重置为“已删除”并且合并提交没有消失之后。是因为它还和蓝流相连吗?
  • 是的,正如我所说,我们最后的强制推动将解决所有这些问题。现在的目标是让您能够进行交互式 rebase。
  • 好的,现在我有了:“删除控制台日志”(右侧)、“同步用户输入”、“广播”等等。其他的都在蓝流上,你在推送后说那些内容会消失?
猜你喜欢
  • 1970-01-01
  • 2011-12-05
  • 1970-01-01
  • 2021-12-08
  • 2011-09-06
  • 2013-03-26
  • 1970-01-01
  • 2020-09-14
  • 2021-06-11
相关资源
最近更新 更多