【问题标题】:How can I merge two identical commits with different hash?如何合并两个具有不同哈希的相同提交?
【发布时间】:2021-03-25 03:28:08
【问题描述】:

我可以通过只读权限访问承包商的 Git 存储库。我从他的服务器中拉出他的分支(smile/dev -> dev),然后将它们推回我的 GitLab 服务器上。然后,我在自定义分支 (sectronic -> origin/sectronic) 上进行修改,然后可以将他们的 smile/dev 变基或合并到我的 sectronic 分支中,如果他们这边发生了一些变化。

现在我最近向我的sectronic 分支提交了一个错误修复,我从该分支导出了一个发送给我的承包商的补丁。他在他的smile/dev 分支上应用了补丁,所以现在我的树中有两个不同的提交,但都做了相同的更改(最上面的两个)。

我怎样才能摆脱这种情况?我无法删除我的分支,因为我想保留过去的修改,我不能真的很难恢复到我自己的提交,因为我本可以在此之后进行其他提交。我目前在 Git 方面不够熟练,不知道如何正确清理它。

我知道工作流程不是最理想的,实现这项工作的正确方法是使用拉/合并请求,但遗憾的是,目前在我的情况下这是不可能的。

【问题讨论】:

  • 如果修改几乎相同,则将两者合并应产生最小数量的合并冲突。如果您想保持历史记录干净并对此进行跟踪,请让您的客户在他们这边进行还原提交(或在您这边执行)删除重复的错误修复使用新提交
  • 您可以交互式变基以从您的分支中删除提交。但是,目前的情况是否不好尚不清楚。这和樱桃采摘没有什么不同。为什么不保持原样?
  • @DaemonPainter 在这种情况下,他们会丢失补丁提交,因为他们不会直接包含我的提交。这是一个奇怪的工作流程,我通常在我这边提交,但他们只应用我的更改补丁并将它们提交到他们的分支上,然后我拉......
  • @matt 谢谢,放弃提交可能是一个不错的解决方案。保持原样是指将微笑/开发分支合并到我的分支中?我只是不认为在树中有两个重复的提交是不干净的,这做同样的事情。也许我的想法是错误的?
  • “我只是不认为在 tre 树中有两个重复的提交是干净的”我说这是一个见仁见智的问题。在正常生活中,由于诸如樱桃采摘之类的事情,这种情况总是会发生。因此,除非这会在以后的合并中造成麻烦,否则为什么不保持原样呢?这就是您的流程的工作方式,提交被复制。

标签: git merge duplicates patch


【解决方案1】:

如果您的分支sectronic 没有与很多人共享(例如:如果您几乎是唯一一个使用它的人,或者也许您和一小群开发人员可以轻松联系),您可能是可以重写你的分支的历史。

如果是这种情况,您可以使用 rebase 并强制推送您的分支:

# from your 'sectronic' branch :
git checkout sectronic

# rebase on top of smile/dev :
git rebase smile/dev

# and force push :
git push --force-with-lease origin sectronic

如果分支与其他开发人员共享,您必须告诉他们也更新他们的本地工作。


如果两个 F[io]x modem power on and off procedures 引入的补丁 100% 相同,git rebase 将自动识别重复提交并将其从重写的分支中删除。

【讨论】:

  • 谢谢,这就是我所做的(准确地说是git rebase sectronic smile/dev,如果我没记错的话也是一样的),实际上我的重复提交消失了,我的个人提交在分支之上。这确实是我一个人在做的一个分支,所以我想我将能够以同样的方式将微笑/开发分支的未来更新集成到我的 sectronic 分支中。
猜你喜欢
  • 2014-09-14
  • 1970-01-01
  • 2019-05-03
  • 2013-04-20
  • 1970-01-01
  • 1970-01-01
  • 2018-02-12
  • 2016-09-19
  • 2013-04-30
相关资源
最近更新 更多