Git 误提交大文件如何恢复?
最近有开发者遇到一个棘手的问题:在执行 Git 提交操作时,不小心将一个 100MB 的 MP4 文件提交到了本地仓库和远程仓库,导致仓库大小暴增。 如何才能将这个错误提交撤销,让本地和远程仓库恢复到提交之前的状态,就像这件事从未发生过一样呢?尤其当该提交已经合并到主分支(master)后,情况又该如何处理?
这个问题的关键在于如何安全有效地撤销错误的提交和推送。 答案中提到的 git reset --soft HEAD^ 命令是一个有效的解决方案。 HEAD^ 指的是当前提交的上一版本。 --soft 参数表示只回退提交,保留修改的文件,不会丢弃工作区的修改。 执行该命令后,误提交的 MP4 文件仍然存在于工作区中。 接下来,开发者需要重新 add 除 MP4 文件以外的其他文件,并使用 git commit -m "your message" 重新提交修改。
然而,由于已经 push 到远程仓库,简单的 git push 命令将无法覆盖远程仓库的错误提交。 这时就需要使用 git push -f 强制推送。 需要注意的是,强制推送 (-f) 会覆盖远程仓库的历史记录,这在协作开发中风险很大,特别是主分支通常不允许强制推送。 如果已经合并到 master 分支,并且 master 分支不允许强制推送,则需要谨慎操作,甚至可能需要联系团队成员协调解决,考虑是否需要使用其他的策略,例如创建一个新的分支来解决这个问题,避免直接修改 master 分支的历史记录。 这部分答案中并没有给出更细致的处理方法,在实际操作中需要根据团队规范和项目情况做出判断。