git命令概览以及原理概述

git命令概览:
在这里插入图片描述
在这里插入图片描述

git工作模式
在这里插入图片描述

git初始化
安装-----Google it

为每一台电脑配置身份信息

$ git config --global user.name “Your Name”

$ git config --global user.email "email@example.com"

把某个目录变成可以让git管理到的目录(创建版本库)

git init

git基本命令

#把内容输入到一个文件

echo “xxxx” > xxxx

#把工作空间的某个文件添加到cache

git add xxxx

#把工作空间的所有内容添加到cache

git add -A

#把cache当中的某个文件提交到本地库

git commit -m “xxxx”

#all

git commit -am “xxxx”

#cache ---->work file恢复一个文件 file1 file2 恢复两个文件 .恢复所有文件

git checkout readme.txt

#git状态查询

git status

#查看不同的地方 默认查看工作区和cache

#git diff --cached 比较cache和Repository

#git diff HEAD 工作区和最新的Resository

#git diff commit-id 工作区和制定的repository

#git diff --cached commit-id

#git diff --commit-id commit-id

git diff

#reset 顾名思义 (HEAD~100)

git reset HEAD^

#git的日志

git log git log --pretty=oneline

#oh my pretty pretty boy i love you

git reflog 查看历史命令

#git rm --cached file_path

git rm

git mv

#远程仓库的克隆岛本地库

git clone

#关联远程仓库

git remote add

#推送到远程仓库

git push

#拉取远程仓库的内容

git pull

#查看当前分支 -a查看所有分支 -av 查看所有分支的信息 -avv 查看所有分支的信息和关系

git branch

#创建一个分支 基于当前分支创建分支

git branch xxx

#基于oldType创建分支

git branch newBranch oldType

#切换分支

git checkout 分支的名字

#删除分支

git branch -d xxx

#查看文件内容

git cat-file -p commitid

#查看对象类型 blob commit tree

git cat-file -t commitid

github

$ ssh-keygen -t rsa -C “email” //public key for push

git remote addnickName gitUrl // conn remote

git push -uremoteBranch localBranch

分支

查看分支

创建分支

基于当前分支创积分分支

基于远程分支创建分支

基于新分支创建分支

基于提交创建分支

其实都是基于commit创建分支

合并分支

一定要切换到被合并的分支上去合并

比如说A要合并A1

那么先要切换到A1,然后在A1上面执行merge

git原理

find .get/objects -type f 查询object是下面所有的文件

git hash-object -w xxx 放到git数据库并且返回hash值 add操作?

git 对象

Blob 对象

存储的是文件内容,压缩的

文件名字是根据内容算出的一个hash值

tree对象

blob对象

子tree对象

commit对象

作者提交者注释

指向一个 tree 的指针

首次提交,提交一个简单的文件 a.txt ,commit 之后的图如下
在这里插入图片描述

如图所示,生成了 3 个对象,一个 commit 对象,一个 tree 对象,一个 blob 对象。图上蓝底是 commit 对象,灰底的是 tree 对象,白底的是 blob 对象,每个对象节点的标题是对象的 key (SHA 摘要)缩略表示。 对于 commit 对象,tree 内容表示这个 commit 对应根目录的 tree 对象,parent 表示父 commit 节点,通常commit 只有一个父节点,也可能没有(首次提交时 parent 为空),也可能有多个(合并节点),commit 对象还保存了 commit message 等信息。 对于 tree 对象,里面的内容包含了文件名,文件对应的 blob 对象的 key,或者是目录名和目录对应 tree 对象的 key。 对于 blob 对象,表示一个实际文件对象的内容,但不包括文件名,文件名是在 tree 对象里存的。

通过 git log 命令获取最新 commit 的 key

通过 git cat-file -p 获取 key 对应 object 的内容,根据 object 里的内容,继续探索,就可以访问到所有关联 object.

HEAD 为什么要通过 refs/heads/master 中转一下,而不是直接指向 master 分支的提交?

每个分支的头指针都指向该分支的最新提交

但是此时出现一个 dev 分支,刚从 master 检出,头指针和 master 相同,HEAD直接指向提交的话,怎么知道,当前工作分支是 master 还是 dev 呢?

HEAD 可以直接指向提交吗?

但是会进入一种特殊的状态 detached HEAD。

detached HEAD,游离的 HEAD 指针。

使用 git checkout 成功的进入了

detached HEAD 状态:

得出结论,当 HEAD 指针直接指向提交时,就会导致 detached HEAD 状态。在这个状态下,如果创建了新提交,新提交不属于任何分支。相对应的,现存的所有分支也不会受 detached HEAD 状态提交的影响

example:

排查问题的时候,checkout 到怀疑的 commit 点上去做些测试,detached HEAD会保护你的现有分支不受影响,测试完了不想保存直接 checkout 到其他地方,可以放弃修改。想保存修改,可以创建一个 git checkout -b 新分支保存

分支指针切换

远程仓库

基于文件共享(nfs)

linux ssh

装好gityum install git

git地址:username@ip:/dir

密码

gitlab

https://about.gitlab.com/installation/#centos-7

传上去

gitlab-ce-10.8.2-ce.0.el7.x86_64.rpm

安装 rpm -ivh /home/tools/gitlab-ce-10.8.2-ce.0.el7.x86_64.rpm

sudo gitlab-ctl reconfigure 时间很少8-10分钟

gitlab-ctl start 启动gitlab

访问gitlabhttp://ip:port

设置密码

use

github

#查找git对象类型以及名称

find .git/objects/ -type f

#获取git的对象类型

git cat-file -t 7f58f0cf58039b

#查看git对象里面的内容

git cat-file -p 7f58f0cf58039b

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值