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

sho*_*osh 3 git git-rewrite-history

一位同事意外提交了一个大型二进制文件,该文件没有源控制权,因此导致存储库异常大。然后,他将该提交推送到公共服务器,此后又进行了其他一系列提交和推送。我正在寻找一种撤消提交的方法,或者只是从远程计算机上删除该二进制文件,以使存储库恢复到通常的大小。

我们常见的远程站点位于assembla.com,因此我没有直接的shell访问权限,只有git。

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

dun*_*nni 5

您可以重新建立分支以删除错误的提交。然后,您必须使用强制推送将重新建立基础的分支推送到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)
Run Code Online (Sandbox Code Playgroud)

git rebase -i将启动交互式rebase模式,您可以在其中删除提交。

要更新开发者的克隆:

git fetch

git reset --hard origin/master
Run Code Online (Sandbox Code Playgroud)

或者只是做一个新鲜的

git clone $(repositoryurl)
Run Code Online (Sandbox Code Playgroud)

大胖子来了:

当您这样做时,您绝对应该在进行更改之前通知所有开发人员提交并推动他们的工作。然后,从旧的存储库中进行备份,以便在出现任何问题的情况下将其还原