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

本地含子模块仓库同步远程:选Stash还是Commit?

本地子模块与远程同步的解决方案

一、Commit 和 Stash 的核心区别

  • Commit:将当前未提交的变更作为新提交永久记录到本地仓库历史中,这些变更会成为本地分支的一部分。
  • Stash:把未提交的变更临时存储到Git的临时存储区,不会写入提交历史,之后可通过git stash pop恢复,也能直接丢弃。

二、你的场景下的正确操作

你的目标是让本地与远程完全一致且无需保留本地未提交变更,不需要使用Commit或Stash,正确步骤如下:

  1. 放弃本地所有未提交变更(包括子模块相关修改):
    git reset --hard HEAD
    
    该命令会强制将本地仓库状态恢复到当前HEAD指向的提交,彻底丢弃所有未提交修改。
  2. 拉取远程仓库最新内容:
    git pull
    
    此时本地会同步远程删除5个子模块的提交,更新.gitmodules文件。
  3. 清理本地残留的多余子模块目录:
    git submodule deinit -f -- .
    git submodule update --init --recursive
    
    第一条命令取消所有本地子模块的初始化,第二条命令根据更新后的.gitmodules重新初始化并同步现有子模块,自动删除多余的子模块目录。

三、关于Commit的意义(若选择Commit)

如果选择Commit,意味着你要把本地当前的未提交变更(比如子模块的删除或修改)保存到本地历史中。之后拉取远程内容时,很可能会出现冲突——远程已有一个删除子模块的提交,而你本地也提交了类似变更,需要手动解决冲突才能合并。

这种操作完全不符合你“让本地与远程完全一致”的目标,Commit会把本地修改加入历史,反而增加了同步的复杂度,因此完全不推荐。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 13:33:20