Git新手求助:含Submodule的分支间文件更新及Rebase错误解决
解决方案与操作指引
一、修复当前rebase冲突问题
- 终止正在进行的rebase操作:
git rebase --abort
- 切换到
node分支,处理libraries目录的冲突根源:
由于master分支已将libraries/设为子模块,而node分支里的libraries/是普通目录,两者无法兼容,需将node分支的文件迁移到子模块仓库:
git checkout node # 可选:备份libraries目录防止误操作 cp -r libraries/ ~/libraries_backup # 删除node分支里的普通libraries目录 git rm -r libraries/ git commit -m "Remove libraries regular directory, switch to submodule"
- 在
node分支添加同名子模块并迁移修改:
git submodule add -b master "URLOfRemoteRepository" libraries/ # 将备份的textfile.txt复制到子模块目录 cp ~/libraries_backup/textfile.txt libraries/ # 进入子模块仓库提交修改 cd libraries/ git add textfile.txt git commit -m "Add and update textfile.txt" git push origin master cd .. # 提交主仓库对子模块引用的更新 git add libraries/ git commit -m "Update submodule reference to include textfile changes" git push origin node
二、合并node分支变更到master分支
现在两个分支的libraries/均为子模块,可正常执行rebase或merge:
git checkout master git rebase node # 若rebase仍有问题,改用merge: # git merge node git push origin master
三、验证需求(克隆后获取子模块修改)
克隆master仓库后,执行以下命令即可获取包含修改的子模块:
git clone <你的主仓库URL> cd <仓库目录> # 初始化并拉取子模块 git submodule init git submodule update # 或一步完成克隆与子模块拉取 git clone --recurse-submodules <你的主仓库URL>
关键注意事项
- 子模块是独立Git仓库,所有对
libraries/的修改需进入子模块目录提交推送到其远程仓库,主仓库仅保存子模块的提交哈希引用。 - 禁止在不同分支对同一目录同时使用普通目录和子模块,这会导致Git核心冲突。
内容的提问来源于stack exchange,提问作者Aravinth Kalai
相关产品推荐
相关产品推荐

