git分支合并问题讨论

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了git分支合并问题讨论相关的知识,希望对你有一定的参考价值。

参考技术A 关于git的分支合并会被覆盖的问题
首先在project1和project2中使用git init初始化仓库
然后直接使用git checkout -b test的方式创建分支,出现如图所示的情况

在test分支使用git branch命令发现没有分支情况,然后使用git branch master命令想要创建主分支,出现了如图的错误:fatal: Not a valid object name: 'master'.
网上查询了一下,发现是分支只是申明了,但是没有初始化,需要使用一次add 和commit去初始化分支。
参考链接: https://blog.csdn.net/jackie_tsai/article/details/51587994

接着我使用git remote add origin 地址 添加一个远程仓库地址,先将建立好的test分支上传到远程仓库,这样远程仓库也会自动创建好一个名为test的分支

为了测试的简易性,我在project1和project2中都创建了一个test.txt的文本,文本内容如下:
project1:

然后我将两个文本上传到远程仓库中:
首先是project1

然后上传project2的

出现这个错误的原因是,我之前在project1中上传了文本,更改了远程仓库中类似版本号的东西,然后project2再上传本文的时候,因为本地仓库不是远程仓库的版本号,所以报出这样的错误
有两种方法:
1、git push -f origin test:将本地仓库的数据强制上传到远程仓库,这样会造成project1上传的数据丢失
2、先使用git pull origin test将远程仓库的数据拉到本地进行合并,然后再上传到远程仓库,下面展示这种方法:

我们可以看到,远程仓库和本地相同文本进行了合并(merge),查看下文本内容变化:

因为发生了一个合并的操作,需要重新经历add - commit 的过程

没问题,远程仓库的数据是预期的,接下来就是我遇到问题的地方了
我重新修改了project1文本的内容,然后上传到远程仓库

上传成功,然后我再从project2中将远程仓库的数据拿出来

问题来了,为什么第一次我们从远程仓库拉到本地能够实现相同数据的合并,而这一次不行呢,经过多番测试,我发现,merge合并的内容是commit内容的文本,也就是说,如果test.txt在本地有commit的操作,那么从远程仓库拉取数据的时候会合并这一部分数据,然后需要重新的add-commit,至于没有commit操作的其他文本,会被远程仓库直接覆盖掉。

总结:
分支合并合并的是commit的内容,也就是版本库的内容,并且分支合并基本都是在本地进行的,也就是无法在客户端去合并远程仓库里的分支。

以上是关于git分支合并问题讨论的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Git 中合并两个分支(主分支和演示分支)代码 [重复]

如何删除所有已合并的 Git 分支?

Git合并两个本地分支

在 GIT 中合并 2 个分支

如何在 git 中获取最后一个合并的分支名称

合并到 git 中的分支而不切换到它