美文网首页随笔-生活工作点滴
详解git合并远程库到本地版本库的原理和方法

详解git合并远程库到本地版本库的原理和方法

作者: Josephx | 来源:发表于2019-07-05 19:38 被阅读1次

先补充一些git里面相关的一些知识:

首先我们要说简单说git的运行机制。git分为本地仓库和远程仓库,我们一般情况都是写完代码,commit到本地仓库(生成本地仓的commit ID,代表当前提交代码的版本号),然后push到远程仓库(记录这个版本号),这个流程大家都熟悉。
我们本地的git文件夹里面对应也存储了git本地仓库master分支的commit ID 和 跟踪的远程分支orign/master的commit ID(可以有多个远程仓库)。那什么是跟踪的远程分支呢,打开git文件夹可以看到如下文件:

.git/refs/head/[本地分支]
.git/refs/remotes/[正在跟踪的分支]

其中head就是本地分支,remotes是跟踪的远程分支,这个类型的分支在某种类型上是十分相似的,他们都是表示提交的SHA1校验和(就是commitID)。
但是,不管他们是如何的相似,他们还是有一个重大的区别:

更改远端跟踪分支只能用git fetch,或者是git push后作为副产品(side-effect)来改变。我们无法直接对远程跟踪分支操作,我们必须先切回本地分支然后创建一个新的commit提交。


image

总结:1. git fetch
使用git fetch更新代码,本地的库中master的commitID不变,还是等于1。但是与git上面关联的那个orign/master的commit ID变成了2。这时候我们本地相当于存储了两个代码的版本号,我们还要通过merge去合并这两个不同的代码版本,如果这两个版本都修改了同一处的代码,这时候merge就会出现冲突,然后我们解决冲突之后就生成了一个新的代码版本。
这时候本地的代码版本可能就变成了commit ID=3,即生成了一个新的代码版本。

相当于fetch的时候本地的master没有变化,但是与远程仓关联的那个版本号被更新了,我们接下来就是在本地合并这两个版本号的代码。

  • git pull
    是用git pull更新代码的话就比较简单暴力了,看下图。

使用git pull的会将本地的代码更新至远程仓库里面最新的代码版本

总结

由此可见,git pull看起来像git fetch+get merge,但是根据commit ID来看的话,他们实际的实现原理是不一样的。
git fetch机制:


git fetch

git pull机制:


git pull

这里借用之前文献看到的一句话:
不要用git pull,用git fetch和git merge代替它。

git diff 语法

git diff 比较的是工作区和暂存区的差别
git diff --cached 比较的是暂存区和版本库的差别
git diff HEAD 可以查看工作区和版本库的差别

这句无法验证本地工作区与远程的差异

git fetch 语法

$ git fetch origin master
从远程的origin仓库的master分支下载代码到本地的origin master

要理解FETCH_HEAD的含义
FETCH_HEAD: 是一个版本链接,记录在本地的一个文件中,指向着目前已经从远程仓库取下来的分支的末端版本。

举例说明:将远程origin仓库的xx分支合并到本地的yy分支。
git fetch origin xx
git checkout yy
git merge FETCH_HEAD

git fetch + git merge

  • $ git fetch origin master
    将远程库下载到本地参考

    $ git log -p master.. origin/master
    对比远程参考库与本地版本库的区别

    $ git merge origin/master
    将俩者合并

  • $ git fetch origin master:temp
    从远程的origin仓库的master分支下载到本地并新建一个分支temp

    $ git diff temp
    比较master分支和temp分支的不同

    $ git merge temp
    合并temp分支到master分支

    $ git branch -d temp
    删除此分支。如果该分支没有合并到主分支会报错,可以用以下命令强制删除git branch -D <分支名>

相关文章

  • 详解git合并远程库到本地版本库的原理和方法

    先补充一些git里面相关的一些知识: 首先我们要说简单说git的运行机制。git分为本地仓库和远程仓库,我们一般情...

  • Git常用命令

    基础操作 远程库操作 查看远程库 添加远程库 推送本地分支到远程仓库 删除远程库 新建远程分支 合并分支 git ...

  • Git常用命令速查表

    创建版本库 $ git clone #克隆远程版本库 $ git init #初始化本地版本库 修改和提交...

  • 《命令行》Git

    创建版本库 git clone 克隆远程版本库 git init 初始化本地版本库 修改和提交 git statu...

  • 1、git简介

    1、git简介 git是目前流行的分布式版本管理系统。它拥有两套版本库,本地库和远程库,在不进行合并和删除之类的操...

  • IntelliJ IDEA如何正确地使用git

    1、git简介 git是目前流行的分布式版本管理系统。它拥有两套版本库,本地库和远程库,在不进行合并和删除之类的操...

  • git命令总结

    Git 命令总结: 创建版本库 克隆远程版本库 $ git clone 初始化本地版本库 $ git init #...

  • GIT的常用命令

    1.创建版本库 $ git clone #克隆远程版本库$ git init#初始化本地版本库 2.提交和修改 ...

  • git 常用命名及日常问题解决

    先看张原理图 暂存区相关指令 本地库 远程库 日志及回滚 git的冲突发生 git的stash git合并出现冲突...

  • Git常用命令

    Git流程本地文件 -> 暂存区 -> 本地版本库 -> 远程版本库 本地操作 跟github交互

网友评论

    本文标题:详解git合并远程库到本地版本库的原理和方法

    本文链接:https://www.haomeiwen.com/subject/kdwehctx.html