使用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的一些理解的更多相关文章

  1. git命令的理解与扩展

    Git的模式如图: Workspace:工作区 Index / Stage:暂存区 Repository:仓库区(或本地仓库) Repository:仓库区(或本地仓库) 一.新建代码库 # 查看gi ...

  2. git的简单理解及基础操作命令

    前端小白一枚,最近开始使用git,于是花了2天看了廖雪峰的git教程(偏实践,对于学习git的基础操作很有帮助哦),也在看<git版本控制管理>这本书(偏理论,内容完善,很不错),针对所学 ...

  3. git使用和理解之一(不含分支)

    0.前言 Workspace:工作区 Index / Stage:暂存区 Repository:仓库区(或本地仓库) Remote:远程仓库 工作区和暂存区: 我们写代码的地方就是工作区,代码写完后, ...

  4. GIT 分支的理解

    乎所有的版本控制系统都以某种形式支持分支. 使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线. 在很多版本控制系统中,这是一个略微低效的过程——常常需要完全创建一个源代码目录的副本 ...

  5. 使用git微命令深入理解git工作机制

    首先.这篇不是真正意义上的翻译,所以大家在看的时候不要找相应的英文文章相应着看.这篇文章之所以归类为翻译.是由于最開始有一篇英文文章让我对git内部机制有了清楚的认识,它能够说是我git的启蒙老师吧. ...

  6. git分支简介,理解HEAD,master

    为了真正理解 Git 处理分支的方式,我们需要回顾一下 Git 是如何保存数据的. 或许你还记得 起步 的内容,Git 保存的不是文件的变化或者差异,而是一系列不同时刻的文件快照. 在进行提交操作时, ...

  7. git的使用理解(分支合并的使用理解,多人编程的解决方案)

    本文主要记录了对git日常使用的一些理解,主要是对git分支的一些感悟. git强大的版本控制系统,之前也使用过SVN,感觉上git对于多人开发的版本控制更加强大,特别是最近对git分支的使用,更是深 ...

  8. GIT基本使用理解

    基本区域介绍 git是一种代码管理工具,所以我们需要知道代码所在位置.分为4个区域: Workspace:工作区 Index / Stage:暂存区 Repository:本地仓库 Remote:远程 ...

  9. Git 的深入理解与GitHub托管服务(转)

    源代码管理系统(SCM)与版本控制   版本控制是一种记录若干文件内容变化,以便将来查阅特定版本修订情况的系统.   本地版本控制系统   许多人习惯用复制整个项目目录的方式来保存不同的版本,或许还会 ...

随机推荐

  1. protobuf-net-data

    protobuf-net http://www.codeproject.com/Articles/642677/Protobuf-net-the-unofficial-manual https://g ...

  2. javascript2

    代码变化一:<script> function abs(){ var x; if(x>0){ return x; } else{ return -x; } } console.log ...

  3. node.js + mongodb

    node.js + mongodb 这次内容是结合bootstrap把登陆注册做好,还有就是express的中间件等问题. 看这篇博客之前建议先看我上篇写的那篇博客http://www.cnblogs ...

  4. 原生JS的DOM节点操作

    DOM(Document Object Model/文档对象模型)是针对HTML和XML文档的一个API.DOM节点树:在文档中出现的空格.回车.标签.注释.文本.doctype.标签等都属于DOM节 ...

  5. SQL点滴31—SQL语句中@@IDENTITY和@@ROWCOUNT区别

    原文:SQL点滴31-SQL语句中@@IDENTITY和@@ROWCOUNT区别 SQL语句中@@IDENTITY和@@ROWCOUNT区别 在一条 INSERT.SELECT INTO 或大容量复制 ...

  6. table居中方法之一:设置width,然后为style设置margin:auto

    比如: <table width="800px" style="margin:auto;">

  7. .NET程序保护专家.NET Reactor发布4.7版本

    .NET Reactor是一款功能强大的代码保护以及许可授权管理系统. 关于代码混淆,针对.NET程序程序而言,.NET Reactor保护的程序目前还没有被破解过.这与.NET Reactor的保护 ...

  8. Asterisk 未来之路3.0_0001

    原文:Asterisk 未来之路3.0_0001 第一章:电信技术革命 刚开始他们忽视你,然后他们嘲笑你,然后他们向你挑战,最后你赢了 ---Mahatma Ganhdi 在5年前,我最初规划写一本关 ...

  9. solr中重跑索引

    solr与.net系列课程(八)solr中重跑索引的注意事项   solr与.net系列课程(八)solr中重跑索引的注意事项 我们如果在项目中使用solr,那肯定就是把数据库中的数据跑进solr服务 ...

  10. qsort 排序功能 总结

    qsort包括在<stdlib.h>头文件里.此函数依据你给的比較条件进行高速排序,通过指针移动实现排序. 排序之后的结果仍然放在原数组中.使用qsort函数必须自己写一个比較函数. 函数 ...