2.2 KiB
实际行为 当你在子模块有未提交的修改时执行 git submodule update: cd thingsboard-client-demo
修改了一些文件,但没有 commit
cd .. git submodule update Git 会: 检测到子模块有未提交的修改 拒绝更新,并给出类似这样的错误: error: Your local changes to the following files would be overwritten by checkout: src/main/java/SomeFile.java Please commit your changes or stash them before you switch branches. Unable to checkout 'abc123' in submodule path 'thingsboard-client-demo' 为什么会这样? git submodule update 本质上是在子模块中执行 git checkout 。Git 的保护机制会阻止 checkout 覆盖未提交的修改。 不同场景 场景 1:未暂存的修改(modified) cd thingsboard-client-demo echo "test" >> file.txt # 修改文件,未 git add
cd .. git submodule update
❌ 会报错,拒绝更新
场景 2:已暂存但未提交(staged) cd thingsboard-client-demo echo "test" >> file.txt git add file.txt # 已暂存,但未 commit
cd .. git submodule update
❌ 仍然会报错,拒绝更新
场景 3:新增的未跟踪文件(untracked) cd thingsboard-client-demo echo "test" > new-file.txt # 新文件,未 git add
cd .. git submodule update
✅ 可以更新!因为新文件不会被覆盖
如何处理未提交的修改? 如果你确实需要更新子模块,有几个选择: 选项 1:提交修改 cd thingsboard-client-demo git add . git commit -m "临时修改" git push # 如果需要保存到远程
cd .. git submodule update 选项 2:暂存修改(stash) cd thingsboard-client-demo git stash # 暂存修改
cd .. git submodule update
cd thingsboard-client-demo git stash pop # 恢复修改 选项 3:放弃修改 cd thingsboard-client-demo git checkout . # 放弃所有修改 git clean -fd # 删除未跟踪的文件
cd .. git submodule update 总结 你的修改是安全的,Git 会保护你的工作: 有未提交修改时,git submodule update 会拒绝执行 你的修改不会丢失 你需要先处理这些修改(提交、暂存或放弃)才能更新子模块 这是 Git 的安全机制,防止意外覆盖你的工作成果。