一、git安装
二、git配置
git config --global user.name 'your _name'
git config --global user.email 'your_email@domain.com'
config作用域:
local:只对某个仓库有效
global:对当前用户的所有仓库有效
system:对系统所有登录的用户有效
显示config的配置,加–list
git config --list --local
git config --list --global
git config --list --system
清除config设置
$ git config --unset --local user.name
$ git config --unset --global user.name
$ git config --unset --system user.name
三、创建仓库并配置local用户信息
两种场景:
1、把已有的项目代码纳入git管理
cd 项目代码所在文件夹
git init
2、新建的项目直接用git管理
cd 某个文件夹
git init your_project #会在当前路径下创建和项目名称同名的文件夹
cd your project
四、基本使用
git add #添加追踪文件
git add . #将文件的修改、新建,添加到暂存区(git2.x下与git add -A效果一致)
git add -u #将文件的修改、删除,添加到暂存区(不包含没有纳入git管理的新增文件)
git add -A #将文件的修改、删除、新建,添加到暂存区
git status #查看状态
git commit #提交文件
git log #查看git日志
五、文件重命名
将版本控制文件readme重命名为readme.md
方案一
mv readme readme.md
git add readme.md
git rm readme
git commit
方案二
git mv readme readme.md
清理暂存区内容
git reset --hard
六、查看git日志
git log --oneline #整行简洁查看日志
git log -n4 --oneline #查看最近4条日志
git log --all #查看所有分支日志
git log --all --graph #图形化界面查看日志
git log [branch] #查看某分支日志
git help --web log #跳转到git log的帮助文档网页
gitk #调起图形化界面工具
gitk /src/filename #查看单个文件的修改历史
七、.git目录
git cat-file 显示版本库对象的内容、类型及大小信息。
git cat-file -t b44dd71d62a5a8ed3 显示版本库对象的类型
git cat-file -s b44dd71d62a5a8ed3 显示版本库对象的大小
git cat-file -p b44dd71d62a5a8ed3 显示版本库对象的内容
git diff HEAD HEAD^1/ HEAD~3 比较当前版本与前1/前3次之前的差异
HEAD:指向当前的工作路径
config:存放本地仓库(local)相关的配置信息。
refs/heads:存放分支
refs/tags:存放tag,又叫里程牌 (当这次commit是具有里程碑意义的 比如项目1.0的时候 就可以打tag)
objects:存放对象 .git/objects/ 文件夹中的子文件夹都是以哈希值的前两位字符命名 每个object由40位字符组成,前两位字符用来当文件夹,后38位做文件。
八、git中commit、tree、blob对象之间的关系
每次commit会产生一个唯一的hash值,每个commit操作都至少会产生一个tree,这个tree是包含整个仓库中所有文件夹及文件和本次新增文件的一个“快照”,tree表征的是文件夹,blob表征的是文件。
通过git cat-file -p 某个commit的hash或git cat-file -p某个commit对应的tree的hash可以查看某次commit具体操作了哪些文件
九、分离头指针
detached HEAD:基于某次commit进行开发(HEAD指针指向某次commit),且未与分支绑定。在未绑定前,切换分支,会丢失之前的开发成果,故在进入分离头指针状态下,在切换分支前切记是否需要保留此次开发成果。
十、分支管理
git branch 查看本地分支
git branch -r 查看远程分支
git branch -av 展示所有分支
git branch branch_name 创建分支
git checkout branch_name 切换分支
git checkout -b branch_name master 在master分支上创建新分支,并切换至新分支
git branch -d branch_name 删除分支
git branch -D branch_name 强制删除分支
git branch --set-upstream master origin/next 指定本地master分支自动追踪origin/next分支,存在追踪关系,则git pull默认拉取该分支代码
十一、git commit
git commit --amend 修改最近一次commit的message
git rebase -i 目标commit前一次的hash值 变基操作,修改备注、合并commit
十二、git diff
git diff --cached/stage 比较暂存区和HEAD
git diff 比较工作区和暂存区
git diff branch1 branch2 <--file> 比较分支或commit之间的差异
十三、git reset
暂存区
git reset HEAD <file> 将暂存区文件恢复成和HEAD一样
git reset --soft 将HEAD修改为指定的commit,暂存区,工作区不变
git reset --hard 将HEAD,暂存区,工作区都修改为指定commit
git reset --mixed 默认值,将HEAD,暂存区修改为指定commit,工作区不变
十四、git checkout
工作区
git checkout filename 将工作区文件恢复为和暂存区一样
十五、git rm
git rm filename 删除文件
十六、git stash
git stash list 工作进度列表
git stash 保存工作进度
git stash apply 拉取最新的工作进度
git stash pop 拉取最新的工作进度,并删除该记录
十七、git的备份
直观区别:
哑协议传输进度不可见,智能协议传输进度可见;
智能协议比哑协议传输速度快;
十八、git remote
git remote 列出所有远程主机
git remote -v 查看远程主机网址
git remote show <host> 查看主机详细信息
git remote add <host> <url> 添加远程主机 隐式添加git clone git@192.168.118.128:/home/gitrepo/test.git
git remote rm/remove <host> 删除远程主机
git remote rename <oldhost> <newhost> 远程主机改名
git pull remotehost remotebranch localbranch 从remotehost主机拉取remotebranch分支代码到localbranch分支
git push [<host>] [<localbranch>][:<remotebranch>] 推送代码,host默认为origin,localbranch默认为当前分支,remotebranch默认为当前分支追踪的分支
当remotebranch不存在时,会在远程主机新建一个同名分支
省略localbranch时,表示删除指定的远程分支,等同于git push <host> --delete <remotebranch>
当前分支与远程分支之间存在追踪关系时,可省略localbranch和remotebranch