真正理解 git fetch, git pull 以及 FETCH_HEAD【转】

转自:http://www.cnblogs.com/ToDoToTry/p/4095626.html

真正理解 git fetch, git pull 

要讲清楚git fetch,git pull,必须要附加讲清楚git remote,git merge 、远程repo, branch 、 commit-id 以及 FETCH_HEAD。

1. 【git remote】首先, git是一个分布式的结构,这意味着本地和远程是一个相对的名称。

本地的repo仓库要与远程的repo配合完成版本对应必须要有 git remote子命令,通过git remote add来添加当前本地长度的远程repo, 有了这个动作本地的repo就知道了当遇到git push 的时候应该往哪里提交代码。

2. 【git branch】其次,git天生就是为了多版本分支管理而创造的,因此分支一说,不得不提, 分支就相当于是为了单独记录软件的某一个发布版本而存在的,既然git是分布式的,便有了本地分支和远程分支一说,git branch 可以查看本地分支, git branch -r  可以用来查看远程分支。 本地分支和远程分支在git push 的时候可以随意指定,交错对应,只要不出现版本从图即可。

3. 【git merge】再者,git的分布式结构也非常适合多人合作开发不同的功能模块,此时如果每个人都在其各自的分支上开发一个相对独立的模块的话,在每次release制作时都需先将各成员的模块做一个合并操作,用于合并各成员的工作成果,完成集成。 此时需要的就是git merge.

4.【git push 和 commit-id】在每次本地工作完成后,都会做一个git commit 操作来保存当前工作到本地的repo, 此时会产生一个commit-id,这是一个能唯一标识一个版本的序列号。 在使用git push后,这个序列号还会同步到远程repo。

在理解了以上git要素之后,分析git fetch 和 git pull 就不再困难了。 

 

首先,git fetch 有四种基本用法

1. git fetch            →→ 这将更新git remote 中所有的远程repo 所包含分支的最新commit-id, 将其记录到.git/FETCH_HEAD文件中

2. git fetch remote_repo         →→ 这将更新名称为remote_repo 的远程repo上的所有branch的最新commit-id,将其记录。 

3. git fetch remote_repo remote_branch_name        →→ 这将这将更新名称为remote_repo 的远程repo上的分支: remote_branch_name

4. git fetch remote_repo remote_branch_name:local_branch_name       →→ 这将这将更新名称为remote_repo 的远程repo上的分支: remote_branch_name ,并在本地创建local_branch_name 本地分支保存远端分支的所有数据。

 

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

 

git pull 的运行过程:

git pull : 首先,基于本地的FETCH_HEAD记录,比对本地的FETCH_HEAD记录与远程仓库的版本号,然后git fetch 获得当前指向的远程分支的后续版本的数据,然后再利用git merge将其与本地的当前分支合并。

 

参考链接 :  

1.https://ruby-china.org/topics/4768

2.http://stackoverflow.com/questions/9237348/what-does-fetch-head-in-git-mean

 

作者: fandyst
出处: http://www.cnblogs.com/todototry/
关注语言: python、javascript(node.js)、objective-C、java、R、C++
兴趣点: 互联网、大数据技术、大数据IO瓶颈、col-oriented DB、Key-Value DB、数据挖掘、模式识别、deep
learning、开发与成本管理

产品: 猪哥网,猪场管理软件,畜牧行业
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。 

时间: 2024-10-22 07:29:27

真正理解 git fetch, git pull 以及 FETCH_HEAD【转】的相关文章

Git远程04:git fetch & git push & git pull

这三条语句的,完整的命令为: 1 git fetch [远程仓库名] [分支01]:[分支02] 实际使用时,远程仓库名和分支名,在特定的情况下可以省略.一两句话说不清楚,采用脑图的方式展示.请一定要注意当前所在的分支是什么. 如果图片显示太小,请到汪汪的网盘下载(文件夹为/Git),如果有XMind,请直接查看脑图源文件. 2015.08.19更新:git fetch & git push & git pull.png:git fetch & git push & git

git fetch, merge, pull, push需要注意的地方(转)

在git操作中,我们经常会用到fetch, merge, pull和push等命令,以下是一些我们需要注意的地方. 给大家准备了参考资料: 1. Whatʼs a Fast Forward Merge?:https://sandofsky.com/images/fast_forward.pdf 2. Understanding the Git Workflow:https://sandofsky.com/blog/git-workflow.html 3. Understanding Git: M

Git 少用 Pull 多用 Fetch 和 Merge(转)

英文原文:git: fetch and merge, don't pull This is too long and rambling, but to steal a joke from Mark Twain Blaise Pascal I haven't had time to make it shorter yet.  There is some discussion of this post on the git mailing list, but much of it is tangen

git pull VS git fetch&merge(good)

从图中可以看到,git fetch和git pull的区别, git fetch 不会自动的将结果merge到本地,只是将远程版本同步到本地版本库,而不会merge到本地副本. git pull  将会直接把working directory中的内容覆盖掉. 使用git fetch和git pull都可以更新远程仓库的代码到本地,但是它们之间还是有区别. git fetch  1 git fetch origin master 2 git log -p master..origin/master

git fetch时报错,之前使用没有问题,今天就报错了

问题描述 git fetch时报错,之前使用没有问题,今天就报错了 error: insufficient permission for adding an object to repository database .git/objects 解决方案 insufficient permission -- 是不是权限有变化了,你不能拉取文件

Gitblit Git 无密码 clone pull SSH Key 生成

Gitblit 环境UBUNUT 14.04 git,git无密码clone pull 等也就是使用ssh 呆狐狸.凨 1.git基础配置 配置查看 git config --lis 用户名和邮箱,如果已填写过则PASS git config --global user.name "username" git config --global user.email "mail@gmail.com" 2.生成SSH密钥 ssh-keygen -t rsa -C &quo

linux系统安装git及git常用命令_Linux

1 安装GIT 复制代码 代码如下: $  sudo aptitude install git$  sudo aptitude install git-doc git-svn git-email git-gui gitk git软件包包含了大部分Git命令,是必装的软件包,第二行命令也是Git软件包,但是是单独发布的,可以选择安装. 2 下载远程项目的GIT库到本地[code]$  git clone git://远程Git库地址  filename[code] filename 是你本地的文件

从VSS到SVN再到Git 记Git的基本操作

Source code control 一直是软件开发过程中重要的环节,从最初的纯文件备份,到使用工具进行管理.Source code control 工具的作用也不仅仅只是单纯的对同一个版本进行管理了.从目前主流的source code control工具当中不难发现里面的Branch, tag等功能的应用场景越来越多,特别是现在多数企业使用的敏捷编程,结合branch和tag等功能真的能够很好的做到多版本开发,快速迭代. 思考: 没有source code control我们如何快速的基于一

使用Git、Git GUI和TortoiseGit

原文http://zengrong.net/post/1722.htm 2012-12-26更新:在TortoiseGit中使用SSH host2012-12-30更新:在安装的时候选择TortoiseGit使用的SSH客户端 注意: 本文不讲解任何关于Git提交.合并等等使用细节和语法,只记录作者在使用Git相关工具中碰到的问题和选择的经验.本文只是个人意见的集中,不代表适合所有人.如果你是 "被惯坏了的那批",请不要介意.:-) 关于命令行 我一直建议在命令行中使用Git或者SVN