Git:如何重写远程历史?

Git:如何重写远程历史?,git,git-rewrite-history,Git,Git Rewrite History,一位同事意外提交了一个大的二进制文件,该文件与源代码管理无关,因此导致存储库异常大。然后,他将这个提交推送到公共服务器,从那时起,就有一堆其他的提交和推送。我正在寻找一种方法来撤消该提交,或者只是从远程上删除二进制文件,以便存储库恢复其正常大小 我们常用的远程设备是assembla.com,所以我没有直接的shell访问权限,只有git 假设这是可能的,那么对其他下游节点会有什么后果?每个人都需要克隆一个新的存储库吗?(如果是这样的话,那没关系)您可以重新设置分支的基础以删除错误提交。然后,您必

一位同事意外提交了一个大的二进制文件,该文件与源代码管理无关,因此导致存储库异常大。然后,他将这个提交推送到公共服务器,从那时起,就有一堆其他的提交和推送。我正在寻找一种方法来撤消该提交,或者只是从远程上删除二进制文件,以便存储库恢复其正常大小

我们常用的远程设备是assembla.com,所以我没有直接的shell访问权限,只有git


假设这是可能的,那么对其他下游节点会有什么后果?每个人都需要克隆一个新的存储库吗?(如果是这样的话,那没关系)

您可以重新设置分支的基础以删除错误提交。然后,您必须使用强制推送将该重定基础的分支推送到Assembla的存储库。然后,所有开发人员要么进行新的克隆,要么获取远程分支,然后将其本地分支硬重置为新的远程分支

基本上,命令是(不一定完整的):

要删除错误提交,请执行以下操作:

git rebase -i $(commit id before false commit)

git commit

git push -f origin master (assuming that the branch is master and the remote at assembla is called origin)
git rebase-我将启动交互式rebase模式,您可以在其中删除提交

要更新开发人员的克隆,请执行以下操作:

git fetch

git reset --hard origin/master
或者只是做一个新的

git clone $(repositoryurl)
大胖子来了,但是:


当您这样做时,在进行更改之前,您应该明确通知所有开发人员提交并推动他们的工作。然后从旧存储库中进行备份,这样您就可以恢复它,如果出现任何问题

供参考,对于更一般的大文件删除,您可以使用
git过滤器分支
或。