操作日志:Git 仓库重新精简提交与强制覆盖远程历史
› 社区话题 › Linux/macOS 与自动化运维 › 操作日志:Git 仓库重新精简提交与强制覆盖远程历史
- 该话题为空。
- 作者帖子
- 2026年10月22日 - 下午6:48 #1531

追光管理员背景与起因
在之前的开发过程中,由于直接执行了全量暂存命令(git add .),导致主主题目录(newvfx、vfxvideo)以及根目录下的临时/入口文件(如 index.php)全部被提交到了自建的远程 Git 仓库(git.x.newvfx.com)中。由于部分版本变更输出较大(在自定义后台浏览时甚至触发了 2 MiB 的安全上限限制),且为了规范项目结构、减少仓库体积,决定对本地仓库进行重构:删除本地旧的历史记录,只精选核心的子主题文件夹(Child Themes)作为仓库的真正“首次提交”(Initial Commit),并彻底覆盖线上的旧历史。
问题:线上已经存在全量版本的代码仓库,线下我删除了仓库并重新初始化,使用选择目录的方式提交,最终push冲突
- 日期:2026年10月22日
- 操作人:Songbin Ji
- 目标场景:在项目目录下包含多个子目录和文件时,避免全量提交(
git add .),仅挑选特定的多个文件夹作为首次提交(Initial Commit),并强制覆盖远程旧仓库的历史记录。
一、 核心步骤与命令记录
1. 检查当前仓库与未跟踪文件状态
首先查看当前本地仓库的状态,确认哪些文件处于
Untracked(未跟踪)状态:
git status2. 清理/撤销之前的错误暂存(如适用)
如果之前不小心执行过
git add .把所有文件都加进去了,需要先将它们撤出暂存区(注意:此操作不会删除本地任何文件):
git rm -r --cached .3. 多文件夹精准添加(Git Add 多个目录)
利用空格隔开多个文件夹路径,仅将需要提交的子主题/文件夹添加到暂存区:
git add newvfx-child/ newvfx-child-grass/ vfxvideo-child/4. 确认暂存区状态
再次检查
git status,确保只有选中的文件夹显示为绿色(
Changes to be committed),而不需要的文件保持在未跟踪状态:
git status5. 执行首次本地提交
将暂存区的指定内容打包提交到本地仓库,并附带提交说明:
git commit -m "首次提交:仅包含指定的三个子主题目录"6. 关联远程仓库地址
如果尚未关联远程仓库,添加远程仓库地址(若已存在可跳过或使用
set-url):
git remote add origin https://git.x.newvfx.com/newvfx7. 强制推送到远程仓库(覆盖旧历史)
由于线上远程仓库之前包含全量文件的旧历史,两边历史分叉。使用强制推送(
--force)用本地干净的精简提交覆盖线上:
git push -u origin master --force二、 经验小结与注意事项
- 选择性提交(Partial Add):在 Git 中,
git add支持同时指定多个路径(用空格分隔),可以完美避开不需要提交的大文件或临时文件。
- 强制覆盖(Force Push)的风险:
git push --force会抹去远程仓库之前的旧提交历史。在个人独立仓库或需要重构初始版本的场景下非常高效,但在多人协作的主分支上需谨慎使用。
- 作者帖子
- 在下方一键注册,登录后就可以回复啦。