Git 学习笔记整理

Git起步

Git是什么?

Git是一个免费的开源分布式版本控制系统,旨在快速,高效地处理从小型到大型项目的全部事务。
git

集中式与分布式的区别:
image


image数据库

Git几个特性

  • 直接记录快照,而非差别比较

    git会对当时的所有文件制做一个快照并保存这个快照的索引。git对待数据更像是一个 快照流segmentfault

  • 几乎全部操做都是本地执行
  • Git保证完整性

    git中全部数据存储前都计算校验和,而后用校验和来引用。git用以计算校验和的机制叫作SHA-1 hash。是一个由40个十六进制字符组成的字符串。实际上,git数据库中保存的信息都是以文件内容的哈希值来索引,而非文件名。缓存

  • Git通常只添加数据

三种状态

git有三种状态:已提交(数据已经保存在本地仓库中)、已修改(已修改文件,可是还未保存到仓库中)、已暂存(对一个已修改文件的当前版本作了标记,使之包含在下次提交的快照中)。

由此引出三个工做区域的概念:Git仓库、工做目录、暂存区域。
image安全

Git内部原理

首先咱们来看一个新的 .git 目录的结构
分布式

HEAD
config*
description
hooks/
info/
objects/
refs/

description文件仅供GitWeb程序使用,咱们无需关心。

config文件包含项目特有的配置选项。
info目录包含一个全局性排除(global exclude)文件,用以放置那些不但愿被记录在.gitignore 文件中的忽略模式(ignored patterns)。
hooks目录包含客户端或服务端的钩子脚本(hook scripts)。



剩下的四个条目很重要:

HEAD文件、(尚待建立的)index文件,和 objects目录refs目录。 这些条目是 Git 的核心组成部分。
objects目录存储全部数据内容;refs目录存储指向数据(分支)的提交对象的指针;HEAD文件指示目前被检出的分支;index 文件保存暂存区信息。工具

Git对象

Git是一个内容寻址文件系统,它的核心部分是一个简单的键值对数据库。post

数据对象(blob object)

是一块二进制数据,没有其余任何指向或任何属性,甚至连文件名都没有。测试

git会根据文件内容计算出一个hash值,以hash值做为文件索引存储在Git文件系统中spa

树对象(tree object)

image

提交对象(commit object)

提交对象是用来保存提交的做者、时间、说明这些信息的,commit-tree除了要指定提交的树对象,也要提供提交说明,至于提交的做者和时间,则是根据环境变量自动生成,并不须要指定。

咱们运行 git add 和 git commit 命令时, Git 所作的实质工做——将被改写的文件保存为数据对象,更新暂存区,记录树对象,最后建立一个指明了顶层树对象和父提交的提交对象。这三种主要的 Git 对象——数据对象、树对象、提交对象——最初均以单独文件的形式保存在 .git/objects 目录下。

image

Git引用

咱们能够借助相似于git log 1a410e 这样的命令来浏览完整的提交历史,但为了能遍历那段历史从而找到全部相关对象,你仍须记住 1a410e 是最后一个提交。咱们须要一个文件来保存 SHA-1 值,并给文件起一个简单的名字,而后用这个名字指针来替代原始的 SHA-1 值。

在 Git 里,这样的文件被称为 引用(references,或缩写为 refs)。你能够在 .git/refs 目录下找到这类含有 SHA-1 值的文件。
image

代码回滚的选择

git reset、git checkout、git revert的选择

附上感受讲的不错的一篇文章

回滚的选择

git reset [type] HEAD

git reset用于撤销未被提交到remote的改动,即撤销local的修改。除了移动当前分支的HEAD(提交记录),还能够更改workspace(工做目录)和index(暂存区):

  • --soft:修改HEAD,不修改index和workspace。
  • --mixed:修改HEAD和index,不修改workspace。默认行为。
  • --hard:修改HEAD、index、workspace。

git revert

经过新建一个commit来撤销一次commit所作的修改,是一种安全的方式,并无修改commit history

总结:

命令 做用域 经常使用场景
git reset 提交层面 在私有分支上舍弃一些没有提交的更改
git reset 文件层面 将文件从缓存区中移除
git checkout 提交层面 切换分支或查看旧版本
git checkout 文件层面 舍弃工做目录中的更改
git revert 提交层面 在公共分支上回滚更改
git revert 文件层面

Git Flow

git flow介绍

Git Flow经常使用的分支

  • Production 分支

    也就是咱们常常使用的Master分支,这个分支最近发布到生产环境的代码,最近发布的Release, 这个分支只能从其余分支合并,不能在这个分支直接修改

  • Develop 分支

    这个分支是咱们是咱们的主开发分支,包含全部要发布到下一个Release的代码,这个主要合并与其余分支,好比Feature分支

  • Feature 分支

    这个分支主要是用来开发一个新的功能,一旦开发完成,咱们合并回Develop分支进入下一个Release

  • Release分支

    当你须要一个发布一个新Release的时候,咱们基于Develop分支建立一个Release分支,完成Release后,咱们合并到Master和Develop分支

  • Hotfix分支

    当咱们在Production发现新的Bug时候,咱们须要建立一个Hotfix, 完成Hotfix后,咱们合并回Master和Develop分支,因此Hotfix的改动会进入下一个Release

图解:
image

附录

Git经常使用命令

百度云 密码:7ze2
图片描述

Git提交规范

  • git commit

    • feat:新功能(feature)
    • fix:修补bug
    • docs:文档(documentation)
    • style: 格式(不影响代码运行的变更)
    • refactor:重构(即不是新增功能,也不是修改bug的代码变更)
    • test:增长测试
    • chore:构建过程或辅助工具的变更
相关文章
相关标签/搜索