有人给我回购邮件进行工作。我以为这是公司回购协议,因此我很高兴开始创建分支机构,然后最终将它们合并为一个分支机构,删除了临时分支机构并进行了推送。 今天,他告诉我这是他的个人回购消息,因此,如果有可能,我可以从他的回购消息中删除我的烂摊子。我保存了我的工作并将其移到新的仓库中,但是我不知道如何删除提交,因此我不会用我的名字“ D”来“弄脏”他的历史。
git reset --hard hislastcommitsha
不起作用。它移动了头部,但是提交仍然存在。我什至可以检查出来。我希望它们消失,就像它们不存在一样。
我认为它们不会被删除,因为即使只有一个分支(主分支),这些提交还是来自先前合并的多个分支(开发和主题分支)。
有什么办法可以将我的提交/名称从他的历史记录中删除?
非常感谢
答案 0 :(得分:1)
(基本假设:您具有回购权,可以使用--force
进行推送,因为相反,您的朋友要您清理任何东西都是不满足的需求) >
当您推送分支(master
)时,git实际上会推送所有可通过祖先达到的新 commits ,从新引用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
手动触发它,而whateve参数将适合您的情况,这取决于他。