从远程 git 历史记录中删除我在本地没有的提交

Posted

技术标签:

【中文标题】从远程 git 历史记录中删除我在本地没有的提交【英文标题】:Remove a commit from remote git history which I don't have locally 【发布时间】:2012-04-04 17:09:15 【问题描述】:

一个团队成员不小心将超过 1GB 的文件提交到我们的 master 分支并将其推送到 origin。从那以后,我将其从源代码控制中删除并致力于掌握。但是,所有其他正在更新其代码(通过git pull)的协作者实际上都在下载这些文件作为历史记录的一部分。

我想完全从历史中删除该提交。我想如果我可以访问团队成员的计算机,这会更容易做到,但我现在没有。那么有没有办法做到这一点而不必从远程拉下最新的?

【问题讨论】:

【参考方案1】:

我假设你有一个 repo 的副本,但只是你没有最新的大提交。您可以使用 git push -f 将您的副本推送到 repo 以完全覆盖其他 repo 提交并从那里继续。

【讨论】:

酷。是的,我没有那个承诺,所以我想尽可能地避免它。问题是她后来提交了更多代码,所以做一个push -f 会把它吹走吗? @john - 当然。现在,她的工作是确保一旦 repo 处于适当的状态,它就会被推送。代码将从服务器上被删除,但当然会保留在她的本地仓库中,她必须能够重新设置/拉取和推送。 我以某种方式设法进行了部分拉取(git pull origin master 后跟 CTRL+C)。它没有下载文件,但更新了我的历史记录。所以我能够做一个rebase 来得到提交和push -f 到master。

以上是关于从远程 git 历史记录中删除我在本地没有的提交的主要内容,如果未能解决你的问题,请参考以下文章

Git删除本地某一提交记录

git删除已经提交的包含敏感信息的文件(还没提交到远程仓库)

意外从具有不同提交历史的远程仓库中提取后访问较旧的 Git 提交

Git本地存储库提交导出

git如何恢复本地删除的文件

写给大忙人看的Git案例总结推荐收藏