热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Github入门(一)

之前早就听说过Git的大名,但由于合作项目时的团体都非常小,所以一直没有开始系统的学习和使用(其实就是懒!),最近终于有动力开始进行入门的学习。首先介绍一下自学用书:https:g

之前早就听说过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对应的object的类型,比如是tree、commit还是别的。

使用git cat-file -p 可以查看哈希码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还是要动手操作才比较有趣,大家赶快试试吧!

————————————————如有错误,欢迎指正批评——————————————————

 


推荐阅读
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • 本文讲述了作者通过点火测试男友的性格和承受能力,以考验婚姻问题。作者故意不安慰男友并再次点火,观察他的反应。这个行为是善意的玩人,旨在了解男友的性格和避免婚姻问题。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • 本文介绍了指针的概念以及在函数调用时使用指针作为参数的情况。指针存放的是变量的地址,通过指针可以修改指针所指的变量的值。然而,如果想要修改指针的指向,就需要使用指针的引用。文章还通过一个简单的示例代码解释了指针的引用的使用方法,并思考了在修改指针的指向后,取指针的输出结果。 ... [详细]
  • 在project.properties添加#Projecttarget.targetandroid-19android.library.reference.1..Sliding ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
author-avatar
montplus手工饼干
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有