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

时间:2019-06-27 22:02:30

标签: git commit reset

有人给我回购邮件进行工作。我以为这是公司回购协议,因此我很高兴开始创建分支机构,然后最终将它们合并为一个分支机构,删除了临时分支机构并进行了推送。  今天,他告诉我这是他的个人回购消息,因此,如果有可能,我可以从他的回购消息中删除我的烂摊子。我保存了我的工作并将其移到新的仓库中,但是我不知道如何删除提交,因此我不会用我的名字“ D”来“弄脏”他的历史。

 git reset --hard hislastcommitsha 

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

我认为它们不会被删除,因为即使只有一个分支(主分支),这些提交还是来自先前合并的多个分支(开发和主题分支)。

有什么办法可以将我的提交/名称从他的历史记录中删除?

非常感谢

1 个答案:

答案 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参数将适合您的情况,这取决于他。