hyf/reademe/submodule/子模块修改后的冲突处理.md

71 lines
2.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

实际行为
当你在子模块有未提交的修改时执行 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 <commit>。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 的安全机制,防止意外覆盖你的工作成果。