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

Git 从多个合并的分支中删除多个提交,git,commit,reset,Git,Commit,Reset,有人给了我一份回购协议。我假设这是一个公司回购协议,我很可能开始创建分支机构,最后我将它们合并成一个分支机构,删除临时分支机构并推送。 今天他给我发信息说这是他的个人回购协议,所以如果可能的话,我会很高兴从他的回购协议中移除我的混乱。我保存了我的工作,并将其转移到新的回购协议,但我不知道如何删除这些承诺,所以我不会用我的名字“玷污”他的历史:D git reset --hard hislastcommitsha 不起作用。它移动头部,但提交仍在原位。我甚至可以查看它们。我想让他们像不存在一

有人给了我一份回购协议。我假设这是一个公司回购协议,我很可能开始创建分支机构,最后我将它们合并成一个分支机构,删除临时分支机构并推送。 今天他给我发信息说这是他的个人回购协议,所以如果可能的话,我会很高兴从他的回购协议中移除我的混乱。我保存了我的工作,并将其转移到新的回购协议,但我不知道如何删除这些承诺,所以我不会用我的名字“玷污”他的历史:D

 git reset --hard hislastcommitsha 
不起作用。它移动头部,但提交仍在原位。我甚至可以查看它们。我想让他们像不存在一样消失

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

我能做些什么把我的名字从他的历史记录中删除吗

非常感谢

(基本假设:你有足够的回购权利来推动——强制,因为相反,你的朋友要求你清理任何东西都是无法满足的要求)

当您推送分支(
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
然而,重要提示:此时,您(错误地)推送的新提交不会从其repo中删除,它们只是没有被任何分支引用,因此它们现在是垃圾收集的候选对象

这就是为什么你仍然可以在本地回购协议中查看它们


如果出于任何原因,你的朋友不想等待典型的垃圾收集时间,他可以选择手动触发,并且根据你的情况选择任何参数。

我们可以安全地假设你的意思是
--硬
而不是
-硬
,这只是你问题中的一个输入错误吗?是的,只是一个输入错误,固定的。我跑得很艰难,头移到了他的最后一个承诺:“我爱你:)就是这样!我甚至不需要等待垃圾收集。如果我现在克隆他的存储库,我的提交和名字就不见了。本地提交没有消失的原因可能是因为它们被origin/master指向,但当我强制推送时,它们也在本地消失,甚至在克隆之前。@cmu111是的,很高兴:-)我不确定您的问题是“悬空”提交在数据库中仍然存在一段时间,或者只是历史记录行。