有人给了我一个回收单让我写。我假设这是一个公司代金库,然后我兴高采烈地开始创建分支,最后我将它们合并成一个单独的分支,删除临时分支并推送。今天他给我发消息说这是他的个人回购,所以如果我能从他的回购中去掉我的烂摊子,那就太好了。我保存了我的工作,并将其移动到一个新的存储库,但我不知道如何删除提交,这样我就不会用我的名字“污点”他的历史:D
git reset --hard hislastcommitsha
不起作用。它移动头部,但提交仍然在适当的位置。我甚至可以查看它们。我要他们消失就像他们从未存在过一样。
我假设它们没有被删除,因为即使只有一个分支(master),这些提交也来自之前的多个分支(开发和主题分支)的合并。
我能做些什么来从他的历史记录中删除我的提交/名字吗?
非常感谢
发布于 2019-06-28 08:22:52
(基本假设:你在回购上有足够的权利使用--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
然而,重要提示:在这一点上,你(错误地)推送的新提交并没有从他的repo中删除,它们只是没有被任何分支引用,所以它们现在是垃圾回收的候选对象。
这就是为什么你仍然可以在你的本地资源库中查看它们的原因。
如果出于任何原因,您的朋友不想等待典型的垃圾收集时间,他可以选择使用git gc
手动触发垃圾收集,并且可以选择适合您的情况的任何参数,这由他决定。
https://stackoverflow.com/questions/56798946
复制相似问题