Github入门(一)
之前早就听说过Git的大名,但由于合作项目时的团体都非常小,所以一直没有开始系统的学习和使用(其实就是懒!),最近终于有动力开始进行入门的学习。
首先介绍一下自学用书:https://git-scm.com/book/en/v2。推荐看英文版,如果实在有困难也可以在左侧更换语言。
下面简单介绍一下今天所学。
一、commit
commit是git中非常重要的一个概念,首先他是一个object。git中的object共有四类:commit、tree、blob和tags。所有的objects都存储在.git/objects下,以对象哈希值的前两位作为目录名,文件名则是哈希值剩下的部分。(此处最好实际操作一下)
commit中记录了一些信息:指向的tree、parent、author、committer。 tree和parent都有自己专属的哈希值,parent是指向上次提交对象(父对象)的指针。
使用git cat-file -t <SHA1>可以查看哈希码SHA1对应的object的类型,比如是tree、commit还是别的。
使用git cat-file -p <SHA1>可以查看哈希码SHA1的内容,比如如果该object是tree,执行该命令后会显示一些子tree和一些blob,以及他们各自的信息;如果该object是blob,执行该命令后会显示对应的文件的内容(比如Readme.md的具体内容);如果该object是commit,执行该命令后会显示指向的tree、parent、author、committer。

二、branch
最关键的一点:branch是指向commit的。
创建branch:git branch master(master是branch名),创建好的branch会指向当前所在的commit。
更换branch:git checkout master(master是已存在的branch)
这些branch放在哪里呢?放在.git/refs/remotes/origin下。
三、HEAD
那么,git是如何知道当前在哪一个branch上的呢?他有一个名为HEAD的特殊指针。该指针指向一个branch,这个branch是你当前所在的本地branch(也即上一次checkout后的branch),如果你checkout的不是一个branch而是一个没有branch指向的commit,那么HEAD将会指向这个commit。

如上图,HEAD直接存放在.git下。
现在我们来看一下在git checkout master2(master2为一个已存在的branch)的时候,发生了什么。其实很简单,就是HEAD改变了自己指向的branch,现在他指向master2了。这样git就知道当前所在的branch是master2。如果你此时git commit,那么HEAD指向的branch将会向前移动,指向这个新创建的commit(HEAD本身仍然指向这个branch);而其他的所有branch将不会有任何变化。
四、工作流
git中的工作流是一个很关键的内容,尤其在团队合作时需要注意。因为你想merge进去的code你的合作者不一定认可,所以不能直接使用git commit中的fast forward功能。该功能的意思是如果你想将新版本和老版本merge起来且你的老版本的HEAD指向的commit是你新版本的HEAD指向的commit的parent,那么无需再创建新的commit,只需改变一下指针位置即可。但是这点在团队合作中并不一定希望使用,所以仍然应该新建一个commit,然后将原版本和更改后的新版本merge进去,方便查看和回退。
这次是以关键名词的形式来介绍了一下git的几个部分,略微有些混乱,文中还有一些用到的概念没有细细介绍,不过自学用书中都说得非常清楚。git还是要动手操作才比较有趣,大家赶快试试吧!
————————————————如有错误,欢迎指正批评——————————————————
Github入门(一)的更多相关文章
- github入门到上传本地项目【网上资源整合】
[在原文章的基础上,修改了描述的不够详细的地方,对内容进行了扩充,整合了网上的一些资料] [内容主要来自http://www.cnblogs.com/specter45/p/github.html#g ...
- github入门到上传本地项目
GitHub是基于git实现的代码托管.git是目前最好用的版本控制系统了,非常受欢迎,比之svn更好. GitHub可以免费使用,并且快速稳定.即使是付费帐户,每个月不超过10美刀的费用也非常便宜. ...
- 《Github入门与实践》读书笔记 蟲咋先生的追求之旅(上)
<Github入门与实践>作者: [日] 大塚弘记 译者:支鹏浩/刘斌 简介 本书从Git的基本知识和操作方法入手,详细介绍了GitHub的各种功能,GitHub与其他工具或服务的协作 ...
- 服务端技术进阶(八)GitHub入门篇
服务端技术进阶(八)GitHub入门篇 前言 在投递简历的过程中,发现有的公司会要求填写自己的GitHub地址,而自己却还没有GitHub帐号,准确点说是自己还不太会使用GitHub.(貌似开源社区中 ...
- Github入门详情教程
前言 之前我写了一篇文章<一篇文章了解Github和Git教程>还延伸了几篇阅读,对大部分小白很有用,那么我继续普及下Github页面及其概念. 定义 GitHub 是一个网站,一个面向开 ...
- Android基础-系统架构分析,环境搭建,下载Android Studio,AndroidDevTools,Git使用教程,Github入门,界面设计介绍
系统架构分析 Android体系结构 安卓结构有四大层,五个部分,Android分四层为: 应用层(Applications),应用框架层(Application Framework),系统运行层(L ...
- 【github&&git】2、github入门到上传本地项目
[在原文章的基础上,修改了描述的不够详细的地方,对内容进行了扩充,整合了网上的一些资料] [内容主要来自http://www.cnblogs.com/specter45/p/github.html#g ...
- <转>github入门到上传本地项目
转自 http://www.cnblogs.com/specter45/p/github.html GitHub是基于git实现的代码托管.git是目前最好用的版本控制系统了,非常受欢迎,比之svn更 ...
- github 入门教程之 github 访问速度太慢怎么办
github 是全世界最流行的开源项目托管平台,其代表的开源文化从根本上改变了软件开发的方式. 基本上所有的需求都能从 github 上或多或少找到现成的实现方案,再也不用重头开始造轮子而是自定义轮子 ...
- 最简单的Github入门基础
起因是小伙伴分享给我github上的一个FQ工具,让我看实现过程.于是,就由关键字"github"搜索开始. 一言之,是个开源的SVN.和CVS.SVN类似,但是,里面有千千万万程 ...
随机推荐
- PHP循环语句基础介绍
PHP 中的循环语句用于执行相同的代码块指定的次数. 循环 在您编写代码时,您经常需要让相同的代码块运行很多次.您可以在代码中使用循环语句来完成这个任务. 在 PHP 中,我们可以使用下列循环语句: ...
- C#实现二叉树的各种遍历
1. 引言 在实际的项目中,树还是用的比较多的一种,尤其是对于具有层次结构的数据.相信很多人都学过树的遍历,比如先序遍历,后序遍历等,利用递归还是很容易理解的. 今天给大家介绍下二叉树的几种遍历算法, ...
- mysql笔记第三天
一下午在学习mysql,最有价值的就是这一点点 Order by 可以对在select字句中出现的字段位置进行排列eg:select name,count(*) from eg group by na ...
- 2015暑假多校联合---Mahjong tree(树上DP 、深搜)
题目链接 http://acm.split.hdu.edu.cn/showproblem.php?pid=5379 Problem Description Little sun is an artis ...
- 设计模式/原则篇- Unit of Work
概念 Unit of Work 即工作单元. 用来维护一组受业务影响的对象列表,将多个操作放在一个单元中,把操作原子化,通过事务统一完成一次提交,如果某个过程出现异常,就将所有修改进行回滚,保证数据的 ...
- 参数化命令相关知识点之==================防止SQl的注入
一: 使用参数化命令查询DAL类: public DataTable StudentDAL(string name,string gender) { string str="连接字符串&qu ...
- Semantic UI – 完全语义化的前端界面开发框架
Semantic UI 是一个 UI 库,使前端开发更简单,更容易学习.Semantic UI 介绍了许多界面元素.在大多数情况下,只有你需要的元素建立一个自定义的构建可能是最好的. UI 组件分为四 ...
- 带给您灵感的25个最新鲜的 HTML5 网站
感谢 HTML5 带来的惊人的先进特性,在未来几年,HTML5 将会继续发挥巨大的推动作用,不仅是在 Web 应用中,网页设计领域也会有新的变革.今天,我们在这里集合了能够带给您灵感的25个最新鲜的 ...
- 定时器相关 setTimeout setInterval 函数节流
这个问题也是在参加百度的前端技术学院中遇到的 任务中需要用js实现动画 导师给的评价中setInterval会导致bug 当时不理解 下面把自己学习的过程分享出来 再次理解单线程 老是说js ...
- [deviceone开发]-HeaderView和FooterView的示例
一.简介 这个是利用do_ListView组件实现下拉和上拉刷新功能的例子,除了do_ListView,其它比如do_Webview,do_ScrollView都有这个个功能.对应的BBS里的帖子详细 ...