真正理解 git fetch, git pull 以及 FETCH_HEAD
真正理解 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
最新文章
- Disable testSuite and testCase on some environment
- js 字符串格式化方法
- 一个Java Dao测试用例
- C#_项目做成安装包
- Model层数据验证
- Spring(七)持久层
- 802.11协议帧格式、Wi-Fi连接交互过程、无线破解入门研究
- Ubuntu上安装mono并进行C#代码测试
- 【自动化测试】Selenium 下载文件
- PXE安装linux系统
- webservice(CXF)基于3.1.1版本实例
- 【剑指offer】删除字符也出现在一个字符串
- [国嵌攻略][137][DM9000网卡驱动编程]
- Java导出CSV文件
- CentOS7部署Dotnet Core2.1
- 学习笔记71—Python 报错处理集
- python安装curses库
- Django登陆以后重定向到请求登陆的页面
- 力扣(LeetCode)292. Nim游戏 巴什博奕
- 使用ubuntu过程中遇到的问题汇总
热门文章
- iOS运用keychain 把identifierForVendor当成唯一标识。替换advertisingIdentifier
- PASCAL知识
- Python学习笔记_04:Django框架简介
- xampp 修改 mysql 默认 root 密码
- PhoneGap开发的android项目环境搭建简单流程
- 《Android源代码设计模式解析与实战》读书笔记(十)
- VTK中模型的旋转与平移
- django生成文件txt、pdf(在生成 PDF 文件之前,需要安装 ReportLab 库)
- HotSpot学习(一)——如何下载openjdk源码
- MySQL存储引擎--MYSIAM和INNODB引擎区别