Git:如何重写远程历史记录?

时间:2014-09-24 05:57:55

标签: git git-rewrite-history

一位同事意外地提交了一个大型二进制文件,该文件没有任何业务处于源代码控制中,从而导致存储库异常庞大。然后他将此提交推送到公共服务器,从那时起,还有许多其他提交和推送。我正在寻找撤消该提交的方法,或者只是从遥控器上删除它的二进制文件,以便存储库重新获得通常的大小。

我们的常用遥控器在assembla.com上,所以我没有直接shell访问它,只是git。

假设这是可能的,对其他下游节点会产生什么影响?每个人都需要克隆一个新的存储库吗? (如果是这样的话,那很好)

1 个答案:

答案 0 :(得分:4)

您可以重新分支您的分支以删除虚假提交。然后,您必须使用强制推送将该重新分支的分支推送到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 -i将启动交互式rebase模式,您可以在其中删除提交。

更新开发者的克隆:

git fetch

git reset --hard origin/master

或者只是做一个新鲜的

git clone $(repositoryurl)

这是大胖子,但

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