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