从多个合并的分支中删除多个提交

remove multiple commits from multiple merged branches

有人给了我一个回购协议来处理。我假设这是一个公司回购,我很高兴地开始创建分支,然后最后我将它们合并为一个,删除了临时分支并推送。 今天他给我发消息说这是他的个人回购协议,所以如果可能的话我最好从他的回购协议中删除我的烂摊子。我保存了我的工作并将其移至新的存储库,但我不知道如何删除提交,所以我不会 "stain" 他的历史记录和我的名字 :D

 git reset --hard hislastcommitsha 

不起作用。它移动了头部,但提交仍然存在。我什至可以检查它们。我希望他们消失,就像他们从未存在过一样。

我假设它们没有被删除,因为即使只有一个分支(master),这些提交来自之前多个分支(开发和主题分支)的合并。

我能做些什么来从他的历史记录中删除我的 commits/name 吗?

非常感谢

(基本假设:你在回购协议中有足够的权利来推送 --force 因为相反,你的朋友要求你清理任何东西都是无法满足的要求)

当您推送分支 (master) 时,git 实际上推送了任何新的 提交 可以通过祖先到达,从提交开始你的新 ref master 目前正指向。

但是当您最初克隆原始存储库时,它自己的 master 版本指向我们正在尝试恢复的提交,hislastcommitsha

所以你需要

# as you already guessed, rewind your version of master
git reset --hard hislastcommitsha

# then push it to his repo
git push --force origin master

然而,重要说明:在这一点上,你(错误地)推送的新提交并没有从他的仓库中删除,它们只是没有被任何分支引用,所以它们现在是垃圾收集的候选人。

这就是您仍然可以在本地存储库中查看它们的原因。

如果您的朋友出于任何原因不想等待典型的垃圾收集时间,他可以选择使用 git gc 手动触发它,任何适合您情况的参数都由他决定。