git merge 合并分支,将目标分支合并到当前分支
git fetch 更新远端分支,但不会merge到本地
git pull 更新远端分支并merge到本地
git pull = git fecth + git merge
merge的意思为“合并”,git merge
命令是用于将分支合并在一起的操作,就是将目标分支合并到当前分支。
git fetch
git fetch
用于更新分支,在一段内其他开发者新建了其他分支,使用该命令将分支信息重新拉取到本地。如下
在gitee上创建了一个xiaoxu的分支
但是查看远程分支还是只有master分支,这是由于该次分支查询是上一次的缓存,而最新的分支信息未更新。
使用git fetch命令更新分支,如下更新了最新的分支信息
将某个远程仓库分支的更新,全部取回本地,不会对代码改动。对本地的开发代码没有任何影响:
git fetch <远程主机名>
也可以更新指定的分支,如下:
git fetch <远程主机名> <分支名>
在本地新建一个xiaoxu分支,并将远程origin仓库的master分支代码下载到本地xiaoxu分支:
# git fetch也可以下载远程分支到本地分支
# 在本地新建一个xiaoxu分支,并将远程origin仓库的master分支代码下载到本地xiaoxu分支
git fetch origin master:xiaoxu
git fetch只用于更新分支信息不会更改代码,对本地分支上的代码没有任何影响。
git merge
在Git中,合并是一个连接分叉历史的过程。它将两个或多个开发历史连接在一起。git merge命令可以帮助你把git分支创建的数据整合到一个分支中。
git merge命令用来合并分支,命令的语法如下:
git merge <query>
该命令会将指定的内容融合到当前分支上。命令的参数可以是提交的内容的id,也可以是某个分支的名称,当是id时,就见提交的内容融合到当前分支,当是分支名称时就是将指定的分支合并到当前活跃的分支上。
git的设计模式merge冲突
git是协同的意味者任何成员都可以创建自己的分支并提交代码。如果将要合并的两个分支都修改了同一个文件的同一个部分内容,Git就无法确定应该使用哪个版本的内容,需要人为介入调整才能继续进行合并。这样的设计原理更有利于维代码安全。
在提交代码时如何避免和解决冲突?
git status
命令查看当前分支的状态,确保HEAD
指正指向的是正确的接收合并的分支。如果不是,执行git checkout
命令切换到正确的分支。- 确保合并操作涉及的两个分支都更新到远程仓库的最新状态。执行
git fetch
拉取远程仓库的最新提交。 - 在编写代码是执行
git merge
命令,将代码融合到主分支上,确保提交内容都是最新内容。(2,3可以直接用git pull
代替)
即使是如上的步骤在协同开发中仍然会遇到冲突,需人为干预解决冲突。
在本地模拟冲突,创建基于主分支创建新分支,在两个分支分别对同一内容修改,主分支提交到远程仓库,在本地切换分支在git push就会遇到冲突。
- 执行
git status
命令查看是否存在冲突
如果出现类似如下输出,则说明当前文件存在冲突
On branch master
You have unmerged paths.
(fix conflicts and run "git commit")
- 查看冲突内容,当Git在合并过程中碰到了冲突,它会编辑受影响的文件中的相关内容,并添加视觉标记用以展示冲突中双方在此部分的不同内容。
git diff --name-only --diff-filter=U
其中--name-only
参数表示只显示文件名,--diff-filter=U
参数表示显示冲突文件。
<<<<<<< HEAD
这里是本地修改的内容
=======
这里是远程修改的内容
>>>>>>> branch_name
=======
之前表示本地修改的内容,之后表示远程修改的内容。
找到本地仓库的对应文件的对应位置,根据实际情况选择保留哪一部分或者进行手动合并。合并完成后,再次提交修改即可解决冲突。
更多git命令移步极客教程git教程