Git 合并子模块改动没有出现 ‘merge following commits not found’
出现的问题
在《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’相关推荐
- git合并分支出现refusing to merge unrelated histories
在两个分支合并的时候,出现了下面的这个错误. $ git merge origin/druid fatal: refusing to merge unrelated histories 这里的问题的关 ...
- 详解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 ...
- git合并代码报错 fatal: refusing to merge unrelated histories,解决方法
git merge upstream/master --allow-unrelated-histories 在合并分支提示"refusing to merge unrelated histo ...
- git rebase VS git merge? 更优雅的 git 合并方式值得拥有
写在前面 如果你不能很好的应用 Git,那么这里为你提供一个非常棒的 Git 在线练习工具 Git Online ,你可以更直观的看到你所使用的命令会产生什么效果 另外,你在使用 Git 合并分支时只 ...
- git合并指定文件到另一分支
经常被问到如何从一个分支合并特定的文件到另一个分支.其实,只合并你需要的那些commits,不需要的commits就不合并进去了. 合并某个分支上的单个commit 首先,用git log或sourc ...
- Git合并特定commits 到另一个分支
合并某个分支上的单个commit 首先,用git log或GitX工具查看一下你想选择哪些commits进行合并,例如: dd2e86 - 946992 -9143a9 - a6fd86 - 5a60 ...
- git命令及git合并分支进行多人协作
git命令及git合并分支进行多人协作 git命令大全 git的工作区.暂存区.本地仓库和远程仓库 git常用命令 git revert 和 git reset的区别 修改默认分支 合并分支 Git分 ...
- git 合并分支撤回
GIT 合并 合并 合并 git merge某分支到目标分支上,发现冲突太多合并代码出问题了想要回退这次提交怎么办? 1.未commit,未push 方式1: 利用idea 的可视化操作 rollba ...
- GIT合并特定commit
Git合并特定commits 到另一个分支 标签: gitmerge合并特定commit单个commit 2014-12-25 14:13 21570人阅读 评论(4) 收藏 举报 分类: Git(1 ...
最新文章
- iphone怎么投屏到电脑_手机怎么投屏到电脑?这几步轻松学会
- python bottle web框架上传静态文件与加载静态文件
- python 作用域 前缀_Python 之作用域和名字空间
- php files上传错误,php-PHP上传文件的问题$_FILES['file']['error']
- logcat read :Invaild argument
- JQuery学习笔记——JQuery基础
- 【Elasticsearch】用ElasticSearch实现基于标签的兴趣推荐
- 最新增值税商品税目编码表_姓名:增值税,税率:13%,9%,6%,这是我最新最全税率表!...
- Java1.8安装win10_java1.8环境配置+win10系统
- java编辑简单文本编辑器_简单文本编辑器
- HTML+JS 写一个 个人博客(初学版)
- vpp之node节点分析一: dual类型节点
- 斯皮尔曼相关(Spearman correlation)系数概述及其计算例
- 计算机office2010excel试题,将计算机二级Office2010Excel试题中会出现的所有公式汇总...
- B站顶流何同学对话苹果CEO库克,iPhone某些设计想法源自中国
- 苹果手机如何深度清理_手机深度清理app
- Excise_day02
- RITnet: Real-time Semantic Segmentation of the Eye for Gaze Tracking
- SAP UI5 Simple Form 属性 columnsL,columnsM,columnsXL 的属性深入剖析试读版
- GPS手机射频的一些测试项目
热门文章
- 树莓派scikit-image安装报错解决
- python兼容性怎么样_简谈python的向下兼容性问题
- 人脸识别的三类安全风险及四类防护思路
- undefined reference to symbol XGetWindowAttributes/cairo_destroy/XShapeGetRectangles
- 3. “见识--吴军”读后感
- DevOps进阶(十二)GIT、GITLAB、GITHUB、GITLIB
- 【摸鱼系列】3万张4K壁纸还不够你换的吗?python还可以实现更多采集可能
- 美国司法部批准IBM以340亿美元价格收购红帽
- DedeCMS:数据库密码和数据库连接失败解决方法
- 阿里OCR身份证识别相关信息