> 文章列表 > git merge、git pull和git fetch

git merge、git pull和git fetch

git merge、git pull和git fetch

git merge、git pull和git fetch

git merge 合并分支,将目标分支合并到当前分支git fetch  更新远端分支,但不会merge到本地git pull   更新远端分支并merge到本地

git pull = git fecth + git merge

merge的意思为“合并”,git merge命令是用于将分支合并在一起的操作,就是将目标分支合并到当前分支。

git fetch

git fetch用于更新分支,在一段内其他开发者新建了其他分支,使用该命令将分支信息重新拉取到本地。如下

在gitee上创建了一个xiaoxu的分支
git merge、git pull和git fetch

但是查看远程分支还是只有master分支,这是由于该次分支查询是上一次的缓存,而最新的分支信息未更新。
git merge、git pull和git fetch

使用git fetch命令更新分支,如下更新了最新的分支信息

git merge、git pull和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 pull和git fetch

git的设计模式merge冲突

git是协同的意味者任何成员都可以创建自己的分支并提交代码。如果将要合并的两个分支都修改了同一个文件的同一个部分内容,Git就无法确定应该使用哪个版本的内容,需要人为介入调整才能继续进行合并。这样的设计原理更有利于维代码安全。

在提交代码时如何避免和解决冲突?

  1. git status命令查看当前分支的状态,确保HEAD指正指向的是正确的接收合并的分支。如果不是,执行git checkout命令切换到正确的分支。
  2. 确保合并操作涉及的两个分支都更新到远程仓库的最新状态。执行git fetch拉取远程仓库的最新提交。
  3. 在编写代码是执行git merge命令,将代码融合到主分支上,确保提交内容都是最新内容。(2,3可以直接用git pull代替)

即使是如上的步骤在协同开发中仍然会遇到冲突,需人为干预解决冲突。

git merge、git pull和git fetch

在本地模拟冲突,创建基于主分支创建新分支,在两个分支分别对同一内容修改,主分支提交到远程仓库,在本地切换分支在git push就会遇到冲突。

  1. 执行git status命令查看是否存在冲突

如果出现类似如下输出,则说明当前文件存在冲突

On branch masterYou 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教程