Sync To Origin
目标
把“这台(可能落后/混乱的)电脑”无脑对齐到 origin 的最新状态,做到:
- •工作区内容与
origin对应分支一致(reset --hard+clean) - •本地所有分支与
origin/*分支一致(强制移动分支指针) - •删除本地那些 远程已不存在 的分支(例如领先电脑已合并并删分支)
这会丢弃本机任何“未推送到 origin”的东西,但会先做可恢复备份。
前提(重要)
- •“领先电脑”的成果需要已经在 GitHub 上(也就是已经推到
origin)。否则落后电脑不可能仅靠同步就得到那些只存在于另一台电脑本地的提交/分支。 - •本 skill 不会 自动把本机内容推到远程;它只做“从远程对齐到本机”。
你会得到的备份
脚本会在 Git 目录下创建:.git/codex-sync-backups/<timestamp>/
- •
repo.bundle:包含本地所有 refs 的离线备份(可用git clone repo.bundle或git fetch repo.bundle <ref>恢复) - •
diff.patch/staged.patch:未提交改动的补丁(即使后面清理了也能找回) - •
untracked.zip(默认开启):未跟踪文件的压缩备份(可用-SkipUntrackedBackup关闭)
关键安全规则(强制)
- •不允许强推(
push --force*)到远程:origin永远是裁决者 - •这是破坏性同步:脚本默认会要求显式确认(
-Yes)才会执行
用法
在你要同步的仓库根目录运行:
powershell
pwsh -NoProfile -ExecutionPolicy Bypass -File custom/sync-to-origin/scripts/sync-to-origin.ps1 -Yes
可选参数:
- •
-SkipUntrackedBackup:不备份未跟踪文件(更快) - •
-NoClean:不执行git clean -ffd(只重置已跟踪文件)
说明:
- •
git clean -ffd只会清理未跟踪文件/目录,不会删除 ignored 文件;如果你需要把 ignored 产物也清掉,请在确认理解风险后手动用git clean -ffdx。
常见失败与处理
- •找不到
origin:先git remote -v,设置正确远程后再跑 - •远程默认分支检测失败:先在本机执行
git remote set-head origin -a,或手动设置远程 HEAD - •有 submodule:建议先在脚本跑完后再
git submodule sync --recursive+git submodule update --init --recursive
如何从备份恢复(紧急用)
- •恢复分支/提交:在 repo 目录执行
git fetch <backupDir>/repo.bundle 'refs/*:refs/*' - •查看补丁:用编辑器打开
diff.patch/staged.patch;或git apply --stat diff.patch
Codex CLI / Windows 沙箱提示
如果脚本里某些 git 操作报 Access is denied / 无法写 .git,在 Codex CLI 里需要用提升权限的执行环境重试(理由:该操作需要写入 .git 元数据)。