You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将本地Git仓库及子模块同步为与远程仓库完全一致的状态?

解决方案

首先明确:git pull --rebase没法直接在脏仓库状态下执行——Git会因为存在未提交的本地修改直接报错,而且它本身也不会自动同步子模块。要让本地仓库完全和远程保持一致,同时更新所有子模块,按以下步骤操作:

1. 清空本地未提交修改(主仓库)

如果你确定要放弃所有本地未提交的变更(包括工作区和暂存区内容),执行:

git reset --hard HEAD

这个命令会将主仓库状态强制重置为当前HEAD对应的提交,所有未提交的修改都会被永久清除。

2. 拉取远程代码并同步子模块

直接使用带递归子模块参数的拉取命令,一步完成主仓库和子模块的同步:

git pull --recurse-submodules

如果需要保持提交历史线性,也可以结合变基参数:

git pull --rebase --recurse-submodules

该命令会先拉取远程主仓库的最新代码并做变基,同时自动将所有子模块更新到对应提交的状态。

3. 单独强制更新子模块(可选)

如果上述命令未完全同步子模块,或者需要确保子模块完全匹配远程指定版本,执行:

git submodule update --init --recursive --force

--force参数会强制子模块重置为主仓库记录的提交版本,子模块本地的未提交修改也会被丢弃。

重要注意事项

  • git reset --hard和git submodule update --force会永久删除本地未提交的修改,执行前务必确认这些内容已无保留必要。
  • 若本地存在已提交但未推送到远程的改动,git pull --rebase会将这些提交变基到远程最新提交之上;如果连这些本地提交也想丢弃,需先执行git reset --hard origin/<你的分支名>(例如git reset --hard origin/main),再进行拉取和子模块同步。

内容的提问来源于stack exchange,提问作者EheRo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 06:20:42