Git原理学习 | 青训营笔记

64 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 2 天

虽然经常在github上闲逛、使用git对自己的小项目等等进行版本控制,但是对git的原理仍然不够熟悉。

个人经常遇到的问题包括

  1. git配了无数遍,但是在下一次配置的时候还是基于搜索引擎的配置。
  2. 团队合作时,merge和rebase底层怎么绕来绕去的不清楚,莫名其妙成功了,莫名其妙失败了。
  3. 基于分支的开发,错误操作如何回滚?什么样的操作对于团队主分支是安全的,什么样的操作是有可能对团队其他成员分支造成麻烦的操作?

这次课程学习解决了第一个问题,同时对git的理解也加深了。第2,3个问题通过搜索回顾了一下,在这里不做记录。

1 git目录介绍

每个git仓库下都有.git文件,其中包含的文件如图所示,他们分别有不同的作用。本文中会记录。 image.png

1.1 git config

包括三种级别的config

分别是--local(配置在本地仓库的.git/config中)--global(配置在~/.gitconfig中)--system(配置在$(prefix)/etc/gitconfig中)

三种config级别依次升高,低级的config会覆盖高级的config

1.2 常见的git 配置

git config --global user.name "myname"

git config --global user.email myemail@xxx.com

2 git remote

表示本地仓库和远端仓库的一些关联信息

git remote -v

查看remote

git remote add origin git@github.com:tianqixin/runoob-git-test.git

添加remote与本地仓库关联。其中可以添加ssh的remote和http的remote

3 常用操作

git init .

初始化当前目录,将会在当前目录下创建.git目录

git add .

将修改加入暂存区

git commit -m "some words"

提交暂存区中的修改到.git目录

4 objects

.git文件下的objects目录中,包括三类objects,分别是blob、tree、commit。他们的含义和关联关系如下

image.png

image.png

git cat-file -p 239exxxxe832

查看objects的内容

5 refs

.git文件下的refs中,保存了所有的分支信息。

image.png

git checkout -b 分支

创建分支