对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)与版本控制 版本控制是一种记录若干文件内容变化,以便将来查阅特定版本修订情况的系统. 本地版本控制系统 许多人习惯用复制整个项目目录的方式来保存不同的版本,或许还会 ...
随机推荐
- 使用WebBrowser控件时在网页元素上绘制文本或其他自定义内容
原文:使用WebBrowser控件时在网页元素上绘制文本或其他自定义内容 第一次在CNBlogs上发Post是提出一个有关使用WebBrowser控件时对SELECT网页元素操作的疑惑,这个问题至今也 ...
- JS代码的几个注意点规范
也谈谈规范JS代码的几个注意点 也谈谈规范JS代码的几个注意点 写JS代码差不多也有两年了吧,从刚开始的“初生牛犊不怕虎”乱写一通到后来也慢慢知道去规范一下自己写的代码.这种感觉就像是代码是你的作品, ...
- 20款最好的免费的IDES和编辑器
程序员编程利器:20款最好的免费的IDES和编辑器 Posted on 2015-02-17 21:52 尛鱼 阅读(170) 评论(1) 编辑 收藏 程序员编程利器:20款最好的免费的IDEs和编辑 ...
- Appium Android Bootstrap源码分析之控件AndroidElement
通过上一篇文章<Appium Android Bootstrap源码分析之简介>我们对bootstrap的定义以及其在appium和uiautomator处于一个什么样的位置有了一个初步的 ...
- Python 3.3 try catch所有的错误Error,不包括Exception。关键在于 sys.exc_info()
import os; import sys; #---------------------------------------------- def main( ) : try : a = 1 / 0 ...
- codeforces #262 DIV2 C称号Present(二分法+贪婪)
职务地址:http://codeforces.com/contest/460/problem/C 这个题是用二分枚举最小值.然后推断是否能在规定的次数内使得全部的数都达到这个值.推断的时候要用贪心的方 ...
- 【原创】窥视懒人的秘密---android下拉刷新开启手势的新纪元
小飒的成长史原创作品:窥视懒人的秘密---android下拉刷新开启手势的新纪元转载请注明出处 **************************************************** ...
- 区域、模板页与WebAPI初步
区域.模板页与WebAPI初步 一.区域—麻雀虽小,五脏俱全的迷你MVC项目 1.1 Area的兴起 为了方便大规模网站中的管理大量文件,在ASP.NET MVC 2.0版本中引入了一个新概念—区域( ...
- SQLSever: 如何在select中的每一行产生不同的随机数?
原文:SQLSever: 如何在select中的每一行产生不同的随机数? select 的随机函数有点假, 也许是因为它是基于时间来的吧, 同一select中由于时间无法错开导致产生的随机数都是一样的 ...
- 安装系统提示选中的磁盘具有MBR分区表
引用:http://jingyan.baidu.com/article/ff42efa9693e88c19e22020c.html 进入bios看到 UEFI状态时 Enabled 启用状态,那么 ...