如何合并两个具有不同哈希值的相同提交?

How can I merge two identical commits with different hash?

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

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

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

我知道工作流程不是最理想的,使这项工作正常进行的正确方法是使用 pull/merge 请求,但遗憾的是,目前在我的情况下这是不可能的。

如果你的分支 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 将自动识别重复提交并将其从您重写的分支中删除。