Git快速入门1

作者: 皮皮大 | 来源:发表于2019-11-20 11:59 被阅读0次

本文中不介绍如何在各大平台上安装Git工具,直接讲解Git中的术语和命令的使用

  • Git术语
  • 命令使用

笔者曾经写过Git使用,里面有介绍如何在win10上安装Git以及简单的介绍了Git的几个常用命令。

Git术语

  1. 版本库

Git的版本库repository不仅仅是一个简单的数据库,它不仅提供版本库中所有文件的完整副本,还提供版本库本身的副本。Git维护两个主要的数据结构

  • 对象库object store
  • 索引index
  1. Git对象类型
  • blob

文件的版本叫做一个块,二进制大对象简称binary large object

  • 目录树tree

一个目录树对象代表一层目录信息,包含:blob标识符、路径名和文件里面的元数据。用来跟踪文件的路径名。

git write-tree   # 查看散列值
  • 提交commit

一个提交对象保存版本库中每个变化的元数据,包含作者、提交者、提交日期和日志消息等。每个提交对象指向一个目录树对象

  • 标签tag

一个标签对象分配给一个任意的且人类可读的名字给一个特定对象,通常是一个提交对象。分为两种标签:轻量级的(lightweight)和带附注的(annotated)Git命令只对带标注的标签起作用。

git tag -m "tag version 1.0" V1.0 3d837438   # 创建带有提交信息和附注的标签
git rev-parse V1.0  # 查看散列值
git cat-file -p 6b82883  # 查看文件信息
  1. 索引

索引是一个临时的、动态的二进制文件,它描述整个版本库的目录结构。Git的索引中不包含任何内容。Git会通过索引而不是工作目录来找到提交的内容。

git status  # 查看索引状态
git ls-files --stage  # 查看SHA1值
  1. 可寻址变更内容

Git对象库被组织及实现成一个内容寻址的存储系统。

对象库中的每个对象都有一个唯一的名称,这个对象是用SHA1算法得到的SHA1散列值。该值是一个160位的数,通常表示为一个40位的十六进制数。

文件的SHA1(散列ID、对象ID)是一种有效的全局唯一标识符

git rev-parse 3b183a430   # 通过前几位散列值查看40个字符
  1. 对象库图示
  • blob对象是数据库的底端,只被树对象引用:矩形
  • 树对象指向若干blob对象或者树对象:三角形
  • 每个提交对象指向一个特定的树对象,一个圆圈表示一个提交对象:圆形
  • 提交文件涉及到分支:圆角矩形
  • 每个标签可以指向最多指向一个提交对象:平行四边形
M2qw7R.png M2qz40.png

Git文件分类

Git中的文件分为3类:

  1. 已追踪的Tracked

指的是已经在版本库中文件,或者是已暂存到索引中的文件,通过git add filename进行追踪。

  1. 被忽略的Ignored

  2. 未追踪的Untracked

如果想忽略某个文件,将该文件加入到.gitignore

echo main.o > .gitinnore

Git命令行

1、基本命令

1、git

安装好Git之后,直接输入git,显示最常用的选项和子命令

2、git help -all

查看某个子命令

3、git —version

查看git版本的版本信息


2、快速入门

假设在目录~/bigdata下面

mkdir ~/bigdata
cd ~/bigdata
echo 'bigdata is so popular' > test.txt
  • 此时文件仍在版本库中
  • Git只是缓存了这个文件test.txt

4、git init

初始化操作 ,将目录转成一个新的Git版本库

5、git add .

最后面是英文的点,.是当前目录的简写,指的是添加目录中的全部文件

6、git add >filename>

添加某个具体的文件。git add命令是将文件暂存。从未追踪变成已追踪的。暂存文件也称之为缓存一个文件,或者把文件放进索引。

7、git status

显示文件的中间状态,命令表示将在下一次提交的时候添加到版本库中

8、git commit

  • 提交命令,可以带上参数-m;加上个人信息
git commit -m "first commit" --author="peter <123456@qq.com>"

设置GIT_EDITOR的环境变量

vim /etc/profile
export GIT_EDITOR=vim

3、配置提交作者

利用git config命令进行设置

git config user.name "peter"
git config user.email "123456@qq.com"

4、查看提交

通过git log进行查看

  • 条目显示内容从最近开始
  • 每个条目包含名字、邮箱、地址、日期和提交的内部识别码ID
git log
git log mydata  # 假设data改成了mydata,查看mydata的新消息
git log --follow mydata  # 查看整个历史记录

git show id号   # 查看某个具体的提交
git show   # 显示最近的一次
git show-branch --more=10   # 查看当前分支的10个提交版本

5、查看提交差异

通过git diff命令

  • <id_old> 前面会带上--
  • <id_new> 前面带上++
git diff <id_old> <id_new>

6、删除和重命名

假设现在~/bigdata有两个文件:index.htmltest.html

  • 删除一个文件
git rm index.html  # 删除之后还要提交信息
git commit -m "remove file index.html"
  • 重命名文件
# 1
mv index.html indexnew.html  # 先复制拷贝一份,防止git rm永久删除文件
git rm index.html  # 删除之后再添加
git add indexnew.html

# 2
git mv index.html indexnew.html

# 暂存的变更必须进行提交
git commit -m "move file index.html"

创建版本副本

git clone old_rep new_rep  # 创建副本

# 查看两个版本的区别
ls -las old_rep new_rep
diff -r old_rep new_rep

Git配置文件

1、配置和移除设置

Git的配置文件都是.ini的文本文件,Git中有多种配置文件

  • .git/config

    版本库特定的配置设置,默认选项,—file选项修改,优先级最高

  • ~/.gitconfig

    用户特定的配置设置,—global修改

  • /etc/gitconfig

    优先级最低,可能不存在,可能在/usr/local/etc/gitconfig

# 控制所有的版本库
git config --global user.name "John"
git config --global user.email "123456@qq.com"

# 针对特点的版本库
git config  user.name "John"
git config  user.email "123456@qq.com"

# 移除设置
git config --unset --global user.email

2、别名设置

  • 修改一条命令:将push origin master设置成psm
git config --global alias.psm "push origin master"
  • 配置文件中批量修改:
vim .gitconfig

[user]
    name = peter
    email = 123456@qq.com
    
# 添加如下内容    
[alias] 
    co = checkout
    ci = commit
    st = status
    psm = push origin master\n
    last = log -l HEAD      
M2oAH0.png

提交commit

绝对和相对提交

Git中,提交是用来记录版本库的变更的。

  • 显式引用:4016进制的SHA1提交ID
  • 隐式引用:始终指向最新提交的HEAD
  1. 绝对提交名

散列ID是唯一值,它能表示唯一确定的一个提交。

git log -1 --pretty=oneline HEAD   # 显示散列值
git log -1 --pretty=online 1ffb58  # 1ffb58是散列值的前6位
  1. 相对提交名
  • master:分支的头
  • master^master分支中的倒数第二个分支
  1. 关于^~的区别

^:表示父级提交,并行关系

~:依次表示父级、祖父级、曾祖父级提交,串行关系

MRtALq.png
git show-branch --more=35 | tail 10   # 限制输出最后10行提交记录
git rev-parse master~3^2^2^   # 查看该分支的散列值ID

提交图

Git使用的有向无环图DAG进行提交

  • 有向:图中的每条边都从一个节点指向另一个节点
  • 无环:节点沿着有向边走,不存在回到起始点的路径
MRUbz4.png MRUzo6.png MRah1e.png

对于上图的解释:

  1. 时间轴是从左到右
  2. A是初始提交,没有父级提交
  3. BA的子提交
  4. CEB的子提交,它们俩无法确定前后
  5. H是一个合并提交(merge commit),拥有多个父级提交
  6. 关于“有首无尾”:比如从B~D的提交,指的是CD,不包含B

查找提交

  1. 查找提交使用的工具是git bisect,方法使用的二分查找法
git bisect start   # 启动查找
git bisect bad      
git bisect good 
git bisect log  # 查看日志

git bisect replay   # 重新查找
  1. 使用git blame

该命令可以显示文件中每行最后是谁做的修改和哪次提交做了变更

git blame -L 35, init/version.c

分支

原因

使用分支的原因:

  1. 一个分支通常代表一个单独的刻画发布版
  2. 一个分支可以封装一个开发阶段
  3. 一个分支可以隔离一个特性的开发
  4. 每个分支可以代表单个贡献者的工作

分支的分类:

  • 特性分支topic branch
  • 开发分支development branch
  • 追踪分支tracking branch

命名规则

  1. 使用斜线创建一个分层的命名方案,但是分支名不能够以斜线/结尾
  2. 分支名不能以减号-开头
  3. 分支名的任何地方不能含有两个点
  4. 不能有空格和空白字符
  5. 不能含有Git中具有特殊含义的字符,如波浪线、冒号、问号、星号等

创建

使用的命令是git branch <branchname>

git branch test  # 创建分支

查看

git branch  # 查看分支
git show-branch   # 结果更详细
git show-branch bug/pr-1 bug/pr-2  # 查看两个分支的提交记录
git show-branch bug/*  # 支持通配符

删除

# 方式1
git branch -D bug/pr-1   # 删除分支

# 方式2
git merge bug/pr-1  # 先合并到主分支
git branch -d bug/pr-1  # 再进行删除,参数是d

切换

git checkout test  # 切换分支
git checkout -b bug/pr-1  # 创建分支同时进行切换

相关文章

  • Git(分布式版本控制系统)

    1 Git是什么 - 认识 -为何需要Git - Git和GitHub有何区别 2 快速入门 git在相应的操作系...

  • Git快速入门1

    本文中不介绍如何在各大平台上安装Git工具,直接讲解Git中的术语和命令的使用 Git术语 命令使用 笔者曾经写过...

  • 入门小白如何快速了解git

    相信大多数入门者都对git的原理比较恍惚,今天我们来告诉大家如何快速学会git命令。 1、git init 这个命...

  • 工具集#01 Git 代码版本控制

    目录:Git 入门Git 进阶Git 高阶总结 1. Git 入门 Git global setup Create...

  • 工具集#01 Git 代码版本控制

    目录:Git 入门Git 进阶Git 高阶总结 1. Git 入门 Git global setup Create...

  • git技术,GitHub、GitLab

    git学习 Git教程(小白快速入门版) Git教程(简化版) git详细学习 Gitlab的管理使用手册git初...

  • git快速入门

    1.Androidstudio中使用git (1)基本配置 a.创建git版本控制:vsc->import int...

  • Git快速入门

    git是什么? Git是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。Git 是...

  • git 快速入门

    这篇文章写的是我对git基本概念的理解,不涉及具体的命令行操作。希望能帮助到那些想要理解git工作原理的人。 具体...

  • git快速入门

    一.项目的创建 1.新建好项目目录 2.初始化git,命令git init 3.将代码添加到暂缓区,命令 git ...

网友评论

    本文标题:Git快速入门1

    本文链接:https://www.haomeiwen.com/subject/smjnictx.html