人工智能/模式识别/机器学习精华专题开源工具技巧Git

Git快速入门1

2019-11-20  本文已影响0人  皮皮大

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

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

Git术语

  1. 版本库

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

  1. Git对象类型

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

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

git write-tree   # 查看散列值

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

一个标签对象分配给一个任意的且人类可读的名字给一个特定对象,通常是一个提交对象。分为两种标签:轻量级的(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. 对象库图示
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

4、git init

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

5、git add .

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

6、git add >filename>

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

7、git status

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

8、git commit

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进行查看

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命令

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 --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、别名设置

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中,提交是用来记录版本库的变更的。

  1. 绝对提交名

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

git log -1 --pretty=oneline HEAD   # 显示散列值
git log -1 --pretty=online 1ffb58  # 1ffb58是散列值的前6位
  1. 相对提交名
  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. 每个分支可以代表单个贡献者的工作

分支的分类:

命名规则

  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  # 创建分支同时进行切换
上一篇 下一篇

猜你喜欢

热点阅读