对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)与版本控制 版本控制是一种记录若干文件内容变化,以便将来查阅特定版本修订情况的系统. 本地版本控制系统 许多人习惯用复制整个项目目录的方式来保存不同的版本,或许还会 ...
随机推荐
- [Android]Parcelable encountered IOException writing serializable object (name = xxx)
Activity之间通过Intent传递值,支持基本数据类型和String对象及它们的数组对象byte.byte[].char.char[].boolean.boolean[].short.short ...
- 多线程学习之一独木桥模式Single Threaded Execution Pattern
Single Threaded Execution Pattern[独木桥模式] 一:single threaded execution pattern的参与者--->SharedResourc ...
- C#实现接口xml序列化与反序列化
C#实现接口xml序列化与反序列化 C#中接口无法被xml序列化,提示不支持.百度和bing也搜不到,只好自己动手写了 原理上肯定支持,.Net自己的xml序列化有一个IXmlSerializab ...
- 使用线程执行堆栈StackTraceElement设计Android日志模块
假设你想在你的Android自己主动打印程序MainActivity.onCreate(line:37)这样的类名.方法名称(行)登录如何实现? 1.介绍Java线程执行堆栈 Java.lang包中 ...
- leetcode[70] Simplify Path
题目的意思是简化一个unix系统的路径.例如: path = "/home/", => "/home"path = "/a/./b/../../ ...
- web浏览器中javascript
1.异步载入一个js代码function loadasync(url) { var head = document.getElementsByTagName("head")[0]; ...
- HTML5表单提示placeholder属性兼容IE
placeholder 属性提供可描述输入字段预期值的提示信息(hint). 该提示会在输入字段为空时显示,并会在字段获得焦点时消失. 注释:placeholder 属性适用于以下的 <inpu ...
- android:Fragment动画的东西
最近很多人来Fragment动画是很感兴趣,我将是一个样本给大家看. 既然做,我会做动画以下类型: 注入弹出动画:从""进入.从"上下左右"弹出,当然,你怎么组 ...
- 我的Android 4 学习系列之文件、保存状态和首选项
目录 使用Shared Preference 保留简单的应用程序数据 保存回话间的Activity实例数据 管理应用程序首选项和创建Preference Screen 保存并加载文件以及管理本地文件系 ...
- sql材料分级统计及汇总案例参考
--第一步:根据系统编号.列.单价分组求和 select CLBH,DJ,sum(SL) as SL,sum(JE) as JE,Lie into #TempSZCMX from #ShouZhiCu ...