操作日志:Git 仓库重新精简提交与强制覆盖远程历史

› 社区话题 › Linux/macOS 与自动化运维 › 操作日志:Git 仓库重新精简提交与强制覆盖远程历史

5
  • 该话题为空。
正在查看 0 条回复
  • 作者
    帖子
    • #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 status
      

      2. 清理/撤销之前的错误暂存(如适用)

      如果之前不小心执行过

      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 status
      

      5. 执行首次本地提交

      将暂存区的指定内容打包提交到本地仓库,并附带提交说明:

      git commit -m "首次提交:仅包含指定的三个子主题目录"
      

      6. 关联远程仓库地址

      如果尚未关联远程仓库,添加远程仓库地址(若已存在可跳过或使用

      set-url

      ):

      git remote add origin https://git.x.newvfx.com/newvfx
      

      7. 强制推送到远程仓库(覆盖旧历史)

      由于线上远程仓库之前包含全量文件的旧历史,两边历史分叉。使用强制推送(

      --force

      )用本地干净的精简提交覆盖线上:

      git push -u origin master --force
      

      二、 经验小结与注意事项

      1. 选择性提交(Partial Add):在 Git 中,
        git add

        支持同时指定多个路径(用空格分隔),可以完美避开不需要提交的大文件或临时文件。

      2. 强制覆盖(Force Push)的风险:
        git push --force

        会抹去远程仓库之前的旧提交历史。在个人独立仓库或需要重构初始版本的场景下非常高效,但在多人协作的主分支上需谨慎使用。

正在查看 0 条回复
  • 在下方一键注册,登录后就可以回复啦。