Git 必知必会

基础概念与配置

像 CVS、Subversion、Perforce等版本控制系统存储的是每个文件与初始版本的差异

而Git更像是把数据看做是对小型文件系统的一组快照,存储的是项目随时间改变的快照

Git基础概念- SHA1

SHA1

  • 所有用来表示项目历史信息的文件,是通过一个40个字符的“对象名”来索引
  • “对象名”看起来像这样:82e777898ff32f0be3c247b2a7132ac90f8f99cf

优点

  • Git只要比较“对象名”,就可以很快的判断两个对象是否相同
  • 因为在每个仓库的“对象名”的计算方法都完全一样,如果同样的内容存在两个不同的仓库中,就会存在相同的“对象名”下。
  • Git可以通过检查对象内容的SHA1的哈希值和“对象名”是否相同,来判断对象内容是否正确。

Git基础概念-blob、tree、commit、tag

blob: 用来存储文件数据(文件内容而非文件名),通常是一个文件。

tree: 有点像一个目录,它管理一些“tree”或者“blob”(就像文件和子目录)

commit:指的是Git的一个提交对象。指向一个“tree”,并且带有相关的描述信息。

tag:用来标记某一个commit的方法。

Git基础概念-对象模型

可以类比为文件系统

Git基础概念-三个区域

工作区工作目录是对项目的某个版本独立提取出来的内容。

暂存区是一个文件,保存了下次将提交的文件列表信息,一般在Git仓库目录中。有时候也被称作“索引”,不过一般说法还是叫暂存区域。

Git仓库目录是Git用来保存项目的元数据和对象数据库的地方。

基本的Git工作流程

  1. 在工作目录中修改文件
  2. 暂存文件,将文件的快照放入暂存区域
  3. 提交更新,找到暂存区域的文件,将快照永久性存储到Git仓库目录。

Git首次配置&获取帮助

配置文件优先级(从高到低)

  • .git/config(只会影响当前仓库) -> ~/.gitconfig (会影响到所有仓库) -> /etc/gitconfig

必须配置

  • $ git config --global user.name "John Doe"
  • $git config --global user.email johndoe@oppo.com

常用配置

  • $ git config --global core.editor vim (改编辑器)
  • $ git config --list (查看所有配置项)

获取帮助

  • git help config (查看 git config 命令的帮助文档)

Git首次配置-Gerrit SSH

Gerrit SSH

  • $ ssh-keygen -> 一路回车 -> cat ~/.ssh/id_rsa.pub -> 复制
  • Gerrit -> 账号 -> Settings -> SSH Public Keys -> Add Key -> 粘贴 -> Add

Git首次配置-Gerrit HTTP

Gerrit HTTP 避免每次输入用户名和密码

获取、修改并提交到仓库

clone with commit-msg hook 会自动添加 Change-Id footer(当前没有Change-Id,推送会失败)

可以通过 --reference 来加速clone,先检查本地 mirror仓库路径
例子:

git clone ssh://ssh地址 --reference /地址 

修改并提交到仓库 - 文件状态

文件地状态变化周期只有两种:已跟踪未跟踪
已跟踪的文件是指那些被纳入了版本控制的文件,在上一次快照中有它们的记录,在工作一段时间后,它们的状态可能处于未修改已修改或已放入暂存区

工作目录中,除已跟踪文件以外的所有其它文件都属于未跟踪文件,它们既不存在于上次快照的记录中,也没有放入暂存区。

修改并提交到仓库 - git status

$git status

修改并提交到仓库 - git add

git add -Agit add . 一样,会将new files, modified files 和 deleted files都放到暂存区。
git add -u new files需要手动放入暂存区。

修改并提交到仓库 - git diff

  • git diff 查看详细修改,工作区和暂存区比较
  • git diff --cached 暂存区和HEAD比较
  • git diff HEAD 工作区和HEAD比较

修改并提交到仓库 - git commit

每次准备提交前,先用 git status 检查一下,然后再运行提交命令 git commit

基本操作:
git clone -> 修改,会文件总共有四种状态 -> git status -> git diff 查看修改内容 -> git status -> git add -> git status 检查状态,没问题后 -> git commit 提交

历史穿梭

分支管理

解决冲突

远程版本库

Git Rebase

图解Git

基线升级实战演练

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,588评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,456评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,146评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,387评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,481评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,510评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,522评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,296评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,745评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,039评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,202评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,901评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,538评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,165评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,415评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,081评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,085评论 2 352

推荐阅读更多精彩内容

  • 核心关键词:init add commit pull push 基本使用 Git六行配置 git confi...
    张德瘦嬢嬢阅读 284评论 3 0
  • Git 学习笔记 GitHub浏览器快捷键:t: 查找 先丢一堆图。。就是这么任性 目录Git对象说明 1.Git...
    歌白梨阅读 951评论 0 1
  • 远程仓库 当你git clone的时候,就是从远程仓库(origin)克隆了master分支到本地。git rem...
    念念咚咚锵阅读 192评论 0 0
  • git对象模型 刚接触git版本库的时候,我就非常好奇,它是如何做版本控制的?版本库大小为什么又没有膨胀?它究竟是...
    No_21312阅读 2,814评论 0 2
  • 朋友整理的,放这里偶尔过来看看 一、基本介绍 首先,Git作为版本控制系统,他的原理与SVN为首的集中式版本控制系...
    allenzhan阅读 994评论 0 3