出现的问题

在《Pro Git》的第7章11节—— 合并子模块改动 中,输入git pull 命令,并没有出现如下书中的结果

$ git pull
remote: Counting objects: 2, done.
remote: Compressing objects: 100% (1/1), done.
remote: Total 2 (delta 1), reused 2 (delta 1)
Unpacking objects: 100% (2/2), done.
From https://github.com/chaconinc/MainProject9a377d1..eb974f8  master     -> origin/master
Fetching submodule DbConnector
warning: Failed to merge submodule DbConnector (merge following commits not found)
Auto-merging DbConnector
CONFLICT (submodule): Merge conflict in DbConnector
Automatic merge failed; fix conflicts and then commit the result.

而是出现下面的内容,

$ git pull
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 2 (delta 0), reused 2 (delta 0), pack-reused 0
Unpacking objects: 100% (2/2), done.
From https://github.com/username/MainProjectfaf7642..f3561d9  master     -> origin/master
Fetching submodule DbConnector
From https://github.com/username/DbConnector42c390a..1a5f567  master     -> origin/master
Updating faf7642..f3561d9
Fast-forwardDbConnector | 2 +-1 file changed, 1 insertion(+), 1 deletion(-)

此结果中并没有出现 merge following commits not found,再查看子模块,发现远程分支与本地分支并没有产生冲突,而是分叉了

$ graph
* a88a3be (HEAD -> master) add return 0;
| * 1a5f567 (origin/master, origin/HEAD) add return 1;
|/
* 42c390a first commit

解决的办法

出现这个问题的原因是,没有在主项目中,提交子模块的修改。下面就来具体演示一下如何复现书本上的内容。新建一个 MainProject 文件夹,在里面新建一个 main.c 文件,在该文件中输入

#inclue<stdio.h>
int main(){}

然后把 MainProject 文件夹初始化为 git 项目

$ git init
Initialized empty Git repository in /Users/apple/Git/MainProject/.git/$ git add main.c$ git commit -m 'first commit'
[master (root-commit) 15a113b] first commit1 file changed, 4 insertions(+)create mode 100644 main.c

新建一个 DbConnector 文件夹,在里面新建一个 connector.c在该文件中输入

#include<stdio.h>
int main(){printf("DbConnector");
}

初始化为 git 项目

$ git init
Initialized empty Git repository in /Users/apple/Git/DbConnector/.git/$ git add connector.c$ git commit -m 'first commit'
[master (root-commit) 42c390a] first commit1 file changed, 4 insertions(+)create mode 100644 main.c

在 Github 中新建一个 DbConnector 的仓库,把本地的内容推送上去

$ git remote add origin https://github.com/username/DbConnector.git$ git push -u origin master
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Delta compression using up to 8 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 262 bytes | 262.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://github.com/username/DbConnector.git* [new branch]      master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.

回到 MainProject,给它添加子模块,并提交

$ git submodule add https://github.com/username/DbConnector.git
Cloning into '/Users/apple/Documents/Git/MainProject/DbConnector'...
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 3 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.$ git commit -m 'add submodule'
[master faf7642] add submodule2 files changed, 4 insertions(+)create mode 100644 .gitmodulescreate mode 160000 DbConnector

在 Github中新建一个 MainProject 仓库,把本地的内容推送上去

$ git remote add origin https://github.com/username/MainProject.git$ git push -u origin master
Enumerating objects: 6, done.
Counting objects: 100% (6/6), done.
Delta compression using up to 8 threads
Compressing objects: 100% (4/4), done.
Writing objects: 100% (6/6), 595 bytes | 595.00 KiB/s, done.
Total 6 (delta 0), reused 0 (delta 0)
To https://github.com/username/MainProject.git* [new branch]      master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.

本机的其它文件夹别的计算机 中克隆 MainProject

$ git clone --recursive https://github.com/username/MainProject.git
Cloning into 'MainProject'...
remote: Enumerating objects: 6, done.
remote: Counting objects: 100% (6/6), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 6 (delta 0), reused 6 (delta 0), pack-reused 0
Unpacking objects: 100% (6/6), done.
Submodule 'DbConnector' (https://github.com/username/DbConnector.git) registered for path 'DbConnector'
Cloning into '/Users/apple/Downloads/MainProject/DbConnector'...
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 3 (delta 0), pack-reused 0
Submodule path 'DbConnector': checked out '42c390a15689a128dd017f1ca38b267af1c206c8'

现在我们有了两个 MainProject,一个是原本的,一个是克隆的,目前两个仓库里的内容是一模一样的,现在让它们的分支产生分叉。来到克隆过后的 MainProject 里的子模块 DbConnector

git checkout master

在代码中添加return 0;,如下

#include<stdio.h>
int main(){printf("DbConnector");return 0;
}

并在子模块中提交

$ git commit -am 'add return 0;'
[master 24cfc12] add return 0;1 file changed, 1 insertion(+)

下面是解决问题的关键!关键!关键!重要的事情说三遍!首先切换回克隆的主项目目录

$ cd ..

运行git status我们可以看到我们的修改

$ git status
On branch master
Your branch is up to date with 'origin/master'.Changes not staged for commit:(use "git add <file>..." to update what will be committed)(use "git checkout -- <file>..." to discard changes in working directory)modified:   DbConnector (new commits)no changes added to commit (use "git add" and/or "git commit -a")

我们必须把在子项目修改的内容在主项目再提交一次

$ git commit -am 'add return 0;'
[master febe029] add return 0;1 file changed, 1 insertion(+), 1 deletion(-)

如果没有提交,当下面使用 git pull命令时,提示信息就不会出现 merge following commits not found,就不会输出和书上一样的结果。现在回到原本的 MainProject 中的子模块,添加与克隆的项目的子模块不一样的提交,如下

#include<stdio.h>
int main(){printf("DbConnector");return 1;
}

在子模块中提交该修改

$ git commit -am 'add return 1;'
[master 1a5f567] add return 1;1 file changed, 1 insertion(+)

回到原本的 MainProject 中,把当前的主项目和子模块的提交推向远程分支,使远程分支与克隆过后的分支产生分叉。在 connector.c 文件中添加 return 1;

$ cd ..$ git commit -am 'add return 1;'
[master 524639a] add return1;1 file changed, 1 insertion(+)$ git push --recurse-submodules=on-demand
Pushing submodule 'DbConnector'
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 8 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 303 bytes | 303.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://github.com/username/DbConnector.git42c390a..1a5f567  master -> master
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Delta compression using up to 8 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 302 bytes | 302.00 KiB/s, done.
Total 2 (delta 0), reused 0 (delta 0)
To https://github.com/username/MainProject.gitfaf7642..f3561d9  master -> master

然后在克隆的 MainProject 中拉取远程服务器的修改

$ git pull
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 2 (delta 0), reused 2 (delta 0), pack-reused 0
Unpacking objects: 100% (2/2), done.
From https://github.com/username/MainProjectfaf7642..f3561d9  master     -> origin/master
Fetching submodule DbConnector
From https://github.com/username/DbConnector42c390a..1a5f567  master     -> origin/master
Failed to merge submodule DbConnector (merge following commits not found)
Auto-merging DbConnector
CONFLICT (submodule): Merge conflict in DbConnector
Automatic merge failed; fix conflicts and then commit the result.

这样就出现和书中一样的结果了。

Git 合并子模块改动没有出现 ‘merge following commits not found’相关推荐

  1. git合并分支出现refusing to merge unrelated histories

    在两个分支合并的时候,出现了下面的这个错误. $ git merge origin/druid fatal: refusing to merge unrelated histories 这里的问题的关 ...

  2. 详解Git合并冲突——原因及解决 “Automatic merge failed; fix conflicts and then commit the result.“

    最后更新日期:2022/10/6 在Git中使用git merge命令合并两个分支的时候,有可能产生这种情况: $ git merge A Auto-merging merge.txt CONFLIC ...

  3. git合并代码报错 fatal: refusing to merge unrelated histories,解决方法

    git merge upstream/master --allow-unrelated-histories 在合并分支提示"refusing to merge unrelated histo ...

  4. git rebase VS git merge? 更优雅的 git 合并方式值得拥有

    写在前面 如果你不能很好的应用 Git,那么这里为你提供一个非常棒的 Git 在线练习工具 Git Online ,你可以更直观的看到你所使用的命令会产生什么效果 另外,你在使用 Git 合并分支时只 ...

  5. git合并指定文件到另一分支

    经常被问到如何从一个分支合并特定的文件到另一个分支.其实,只合并你需要的那些commits,不需要的commits就不合并进去了. 合并某个分支上的单个commit 首先,用git log或sourc ...

  6. Git合并特定commits 到另一个分支

    合并某个分支上的单个commit 首先,用git log或GitX工具查看一下你想选择哪些commits进行合并,例如: dd2e86 - 946992 -9143a9 - a6fd86 - 5a60 ...

  7. git命令及git合并分支进行多人协作

    git命令及git合并分支进行多人协作 git命令大全 git的工作区.暂存区.本地仓库和远程仓库 git常用命令 git revert 和 git reset的区别 修改默认分支 合并分支 Git分 ...

  8. git 合并分支撤回

    GIT 合并 合并 合并 git merge某分支到目标分支上,发现冲突太多合并代码出问题了想要回退这次提交怎么办? 1.未commit,未push 方式1: 利用idea 的可视化操作 rollba ...

  9. GIT合并特定commit

    Git合并特定commits 到另一个分支 标签: gitmerge合并特定commit单个commit 2014-12-25 14:13 21570人阅读 评论(4) 收藏 举报 分类: Git(1 ...

最新文章

  1. iphone怎么投屏到电脑_手机怎么投屏到电脑?这几步轻松学会
  2. python bottle web框架上传静态文件与加载静态文件
  3. python 作用域 前缀_Python 之作用域和名字空间
  4. php files上传错误,php-PHP上传文件的问题$_FILES['file']['error']
  5. logcat read :Invaild argument
  6. JQuery学习笔记——JQuery基础
  7. 【Elasticsearch】用ElasticSearch实现基于标签的兴趣推荐
  8. 最新增值税商品税目编码表_姓名:增值税,税率:13%,9%,6%,这是我最新最全税率表!...
  9. Java1.8安装win10_java1.8环境配置+win10系统
  10. java编辑简单文本编辑器_简单文本编辑器
  11. HTML+JS 写一个 个人博客(初学版)
  12. vpp之node节点分析一: dual类型节点
  13. 斯皮尔曼相关(Spearman correlation)系数概述及其计算例
  14. 计算机office2010excel试题,将计算机二级Office2010Excel试题中会出现的所有公式汇总...
  15. B站顶流何同学对话苹果CEO库克,iPhone某些设计想法源自中国
  16. 苹果手机如何深度清理_手机深度清理app
  17. Excise_day02
  18. RITnet: Real-time Semantic Segmentation of the Eye for Gaze Tracking
  19. SAP UI5 Simple Form 属性 columnsL,columnsM,columnsXL 的属性深入剖析试读版
  20. GPS手机射频的一些测试项目

热门文章

  1. 树莓派scikit-image安装报错解决
  2. python兼容性怎么样_简谈python的向下兼容性问题
  3. 人脸识别的三类安全风险及四类防护思路
  4. undefined reference to symbol XGetWindowAttributes/cairo_destroy/XShapeGetRectangles
  5. 3. “见识--吴军”读后感
  6. DevOps进阶(十二)GIT、GITLAB、GITHUB、GITLIB
  7. 【摸鱼系列】3万张4K壁纸还不够你换的吗?python还可以实现更多采集可能
  8. 美国司法部批准IBM以340亿美元价格收购红帽
  9. DedeCMS:数据库密码和数据库连接失败解决方法
  10. 阿里OCR身份证识别相关信息