对Git的一些理解
使用Git都快2年了,能够说熟练使用git,遇到不会的也可以自己查询git帮助手册。平时可以根据shell的管道命令,组合一些命令比如git show commitID | grep “diff”来看看某次提交修改了哪些文件,还经常帮助同事解决git上面的问题。但是自己心里明白,还是有很多地方不是很懂。这几天抽空温故了下proGit,基于平日的思考,感觉有了不少的进步,准备总结下。这里事先说明:本篇总结适合一定Git基础的人看,自己总结的可能有些地方理解错误,请理解请指出。
我们在使用git init命令初始化一个仓库的时候,发现都会默认新建立了一个master分支。也就是说一个仓库一般都会存在一个master分支,只要你不去删除它。在使用git clone命令克隆一个仓库时候,也会发现默认新建立了一个master分支,并且这个分支跟踪的远程分支是master。clone出来的仓库,其中的master分支跟踪的远程分支实际上可以存在也可以不存在,不过这都对于本地master分支没有关系,一次push操作就可以让其存在或者不存在了。:-D
clone出来的本地仓库会把远程仓库看为origin仓库,这样很多地方就会出现origin字眼。使用git branch -r命令查看远程分支,会发现所有的远程分支都会有origin字段。ProGit是这样说说明的,clone仓库的时候,都会在本地建立指向远程仓库分支的远程分支,并且增加origin字段,git branch -r命令查看的其实就是这些分支,当然就都有origin了。使用git checkout -b branchName branchName命令新建一条跟踪远程分支的分支,就是从本地远程分支的基础上建立一个分支,所以要在中心库的分支名字前面加上origin。
有了前面的本地建立的远程分支知识,在顺道总结下git fetch和git pull命令。git fetch命令其实就是更新本地远程分支,这些远程分支只有在git branch -r命令下才能看到,都是悄悄的更新,一般看不到。git fetch命令也仅仅是更新本地远程分支,不做其它操作,所以没有任何其他影响或者副作用。git pull命令就不同了,他会更新本分支跟踪的本地远程分支,并且将本地远程分支merge到本分支上。在每个仓库下,查看.git/config文件会看到类似下面的类容:
[branch "master"]
remote = origin
merge = refs/heads/master
这些就是本分支跟踪的远程分支,也是git pull命令时候会merge的分支。使用git fetch会更新所有的本地远程分支,git pull一般是更新一条本地远程分支。
准确的分支名称是什么,在执行repo init命令或者git clone命令的时候是能看清楚的,其参数-b后面接的内容就是一条分支的准确名称。其他的诸如git checkout -b 或者 git branch,都是本地化操作,其后面的分支名称都是本地自己规定的,不是中心库里面的分支名称。使用repo init命令下载下来的git仓库没有新建默认本地分支,仅仅是有了所有的本地远程分支,可以使用repo start命令迅速建立一条默认分支。repo start的命令也仅有2中用法:1.后面加--all,即为当前代码的所有仓库新建默认分支 2.不加--all,为当前仓库新建默认分支。这里的默认分支就是repo init -b后面接的内容,在repo配置文件manifest.xml里面也可以看到。
git push命令都会涉及到远程仓库,一般使用clone命令或者repo inti命令产生的本地仓库,都会将默认的远程仓库设置为origin,这也就是git push后面常常接一个origin命令的原因。
git里面的分支可以说是一个个指针,其指向不同的节点,节点的前进或者后退就对应中分支的提交或者回退。所谓的当前分支,即有在这些指针之外还有一个特殊的指针,head指针。这个指针不指向节点,而是指向分支名称指针。
对Git的一些理解的更多相关文章
- git命令的理解与扩展
Git的模式如图: Workspace:工作区 Index / Stage:暂存区 Repository:仓库区(或本地仓库) Repository:仓库区(或本地仓库) 一.新建代码库 # 查看gi ...
- git的简单理解及基础操作命令
前端小白一枚,最近开始使用git,于是花了2天看了廖雪峰的git教程(偏实践,对于学习git的基础操作很有帮助哦),也在看<git版本控制管理>这本书(偏理论,内容完善,很不错),针对所学 ...
- git使用和理解之一(不含分支)
0.前言 Workspace:工作区 Index / Stage:暂存区 Repository:仓库区(或本地仓库) Remote:远程仓库 工作区和暂存区: 我们写代码的地方就是工作区,代码写完后, ...
- GIT 分支的理解
乎所有的版本控制系统都以某种形式支持分支. 使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线. 在很多版本控制系统中,这是一个略微低效的过程——常常需要完全创建一个源代码目录的副本 ...
- 使用git微命令深入理解git工作机制
首先.这篇不是真正意义上的翻译,所以大家在看的时候不要找相应的英文文章相应着看.这篇文章之所以归类为翻译.是由于最開始有一篇英文文章让我对git内部机制有了清楚的认识,它能够说是我git的启蒙老师吧. ...
- git分支简介,理解HEAD,master
为了真正理解 Git 处理分支的方式,我们需要回顾一下 Git 是如何保存数据的. 或许你还记得 起步 的内容,Git 保存的不是文件的变化或者差异,而是一系列不同时刻的文件快照. 在进行提交操作时, ...
- git的使用理解(分支合并的使用理解,多人编程的解决方案)
本文主要记录了对git日常使用的一些理解,主要是对git分支的一些感悟. git强大的版本控制系统,之前也使用过SVN,感觉上git对于多人开发的版本控制更加强大,特别是最近对git分支的使用,更是深 ...
- GIT基本使用理解
基本区域介绍 git是一种代码管理工具,所以我们需要知道代码所在位置.分为4个区域: Workspace:工作区 Index / Stage:暂存区 Repository:本地仓库 Remote:远程 ...
- Git 的深入理解与GitHub托管服务(转)
源代码管理系统(SCM)与版本控制 版本控制是一种记录若干文件内容变化,以便将来查阅特定版本修订情况的系统. 本地版本控制系统 许多人习惯用复制整个项目目录的方式来保存不同的版本,或许还会 ...
随机推荐
- JavaScript Date对象介绍
原文:JavaScript Date对象介绍 Date 日期和时间对象 1. 介绍 Date对象,是操作日期和时间的对象.Date对象对日期和时间的操作只能通过方法. 2. 构造函数 2.1 new ...
- 设计模式组合模式(Composite)精华
23种子GOF设计模式一般分为三类:创建模式.结构模型.行为模式. 创建模式抽象的实例,他们帮助如何创建一个系统独立.这是一个这些对象和陈述的组合. 创建使用继承类的类架构更改实例.的对象类型模型的建 ...
- 利用svn自动同步更新到网站服务器 -- 网摘
首先在服务器上安装VisualSVN Server ,根据提示选好安装的路径,一路确定.安装好后运行VisualSVN Server ,在Repositories上点击右键,选择create New ...
- ASP.NET 5:初始化数据库
ASP.NET 5:初始化数据库 1.初始化数据库 1.2目录 这不是专述模式/架构设计的帖子,架构搭建以讲解文章为目的,先不过多分层. 截这个图也是便于你对应下面找代码文件路径! 1.2代码 先控制 ...
- 关于Installshield里一些常见问题的解答—艾泽拉斯之海洋女神出品
原文:关于Installshield里一些常见问题的解答-艾泽拉斯之海洋女神出品 上一篇:一个完整的安装程序实例—艾泽拉斯之海洋女神出品(五) --补遗转载时请务必保留转载出处和由艾泽拉斯之海洋女神出 ...
- Installshield在安装结束时刷新系统
原文:Installshield在安装结束时刷新系统 在OnEnd里添加代码,两种解决方案 群友kevin的解决方案 #include "ifx.h" //Call to Win ...
- 创建android phonegap项目
一. 首先需要在Eclipse中创建一个Android项目 打开Eclipse,打开File->New->Project 选择Android Application Project点击Ne ...
- CSS知识点:font小细节
font是用来设置网页字体属性的关键字,使用频率非常高,大家也比较熟悉.它有两种写法,一种是简写,一种分开写. 简写--font:italic bold 12px/20px arial,sans-se ...
- 工作经常使用的SQL整理
工作经常使用的SQL整理,实战篇(二) 工作经常使用的SQL整理,实战篇,地址一览: 工作经常使用的SQL整理,实战篇(一) 工作经常使用的SQL整理,实战篇(二) 工作经常使用的SQL整理,实战 ...
- Printk 标志优先级别
#define KERN_EMERG "<0>" /* 致命级:紧急事件消息,系统崩溃之前提示,表示系统不可用 */# ...