Git 从多个合并的分支中删除多个提交
有人给了我一份回购协议。我假设这是一个公司回购协议,我很可能开始创建分支机构,最后我将它们合并成一个分支机构,删除临时分支机构并推送。 今天他给我发信息说这是他的个人回购协议,所以如果可能的话,我会很高兴从他的回购协议中移除我的混乱。我保存了我的工作,并将其转移到新的回购协议,但我不知道如何删除这些承诺,所以我不会用我的名字“玷污”他的历史:DGit 从多个合并的分支中删除多个提交,git,commit,reset,Git,Commit,Reset,有人给了我一份回购协议。我假设这是一个公司回购协议,我很可能开始创建分支机构,最后我将它们合并成一个分支机构,删除临时分支机构并推送。 今天他给我发信息说这是他的个人回购协议,所以如果可能的话,我会很高兴从他的回购协议中移除我的混乱。我保存了我的工作,并将其转移到新的回购协议,但我不知道如何删除这些承诺,所以我不会用我的名字“玷污”他的历史:D git reset --hard hislastcommitsha 不起作用。它移动头部,但提交仍在原位。我甚至可以查看它们。我想让他们像不存在一
git reset --hard hislastcommitsha
不起作用。它移动头部,但提交仍在原位。我甚至可以查看它们。我想让他们像不存在一样消失
我假设它们没有被删除,因为即使只有一个分支(主分支),这些提交也来自之前多个分支(开发和主题分支)的合并
我能做些什么把我的名字从他的历史记录中删除吗
非常感谢(基本假设:你有足够的回购权利来推动——强制,因为相反,你的朋友要求你清理任何东西都是无法满足的要求)
当您推送分支(master
)时,git实际上推送了任何可以通过祖先访问的新提交,从您的新refmaster
当时指向的提交开始
但是,当您最初克隆原始回购协议时,它自己版本的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是的,很高兴:-)我不确定您的问题是“悬空”提交在数据库中仍然存在一段时间,或者只是历史记录行。