[TOC]
一、Git基础
1. config的三个作用域
1. 缺省等同于local
- $ git config –local #local只对某个仓库有效
- $ git config –global #global对当前用户所有仓库有效
- $ git config –system #system对系统所有登录的用户有效
2. 显示config的配置,加–list
- $ git config –list –local
- $ git config –list –global
- $ git config –list –system
2. 建Git仓库
1. 把已有的项目代码纳入Git管理
- $ cd 项目代码所在的文件夹
- git init
2. 新建的项目直接用Git管理
- cd 某个文件夹
- git init your_project # 会在当前路径下创建和项目名称相同的文件夹
- cd your_project
1 | graph TD |
3. Git常用命令
1. git commit:提交变更
- git commit -m ‘log’:提交变更,日志为log
- git commit -am ‘log’:直接将变动提交到版本库中,不经过暂存区(不建议使用)
- git commit –amend:修改最近一次提交的log日志
2. git status:显示工作目录和暂存区的状态
3. git add:添加修改到暂存区
- git add .:提交所有的变化(Git1.x版本中不包含被删除的文件)
- git add -u:提交被修改和被删除的文件到暂存区,不包括新文件
- git add -A:提交所有的变化
4. git log:查看当前分支的git提交日志
- git log –oneline:查看当前分支的git提交日志(简洁版本)
- git log -n3:查看最近的3次日志,查看几次就输入几
- git log –all:查看所有分支的提交日志
- git log –graph:图形化查看日志
5. git branch:查看本地分支
- git branch -r:查看远程分支;
- git branch -a:查看本地和远程分支;
- git branch -v:查看本地分支信息;
- git branch -vv:查看更多本地分支信息;
- git branch -av:查看所有分支信息;
- git branch -m oldbranch newbranch:重命名分支;
- git branch -M oldbranch newbranch:强制重命名分支(如果newbranch分支已存在,那么采用-M强制重命名为newbranch)
6. git checkout:检出分支
- git checkout -b branchName:新建一个branchName分支,并切换到该分支,等同于两条命令的简写
- git branch branchName
- git checkout branchName
- git checkout branchName:切换到branchName分支
7. git branch -d:删除分支
- git branch -d branchName:删除本地分支;
- git branch -d -r branchName:删除远程分支;
- git branch -D branchName:强制删除分支;
8. git diff :比较两个commit的差异
- git diff 哈希值1 哈希值2:哈希值1处提交与哈希值2处提交的区别
- git diff HEAD HEAD^:HEAD和HEAD父节点的区别
9. git rebase:
- git rebase -i commitName:
4. 目录.git下文件作用
1. HEAD
指向当前的工作路径,例如:ref: refs/heads/master表示处于master分支
通过git checkout test命令可以切换到test分支,切换后,HEAD内容会变换为ref: refs/heads/test
2. config
用于存储本地仓库相关的配置信息,例如:
1 | [core] |
3. refs目录
- refs/heads:存放分支信息
- refs/tags:存放tag信息
里面存储的是各个分支和tag的SHA-1 值
git cat-file -t 哈希值:查看版本库对象的类型,git中类型一般就commit,tree,blob这三种,blob就是文件
git cat-file -p 哈希值:查看版本库对象的内容
git cat-file -s 哈希值:查看版本库对象的大小
4. objects目录
文件夹中的子文件夹都是以哈希值的前两位字符命名 每个object由40位字符组成,前两位字符用来当文件夹名,后38位做文件名。存储的是分支文件的tree和blob等
5. ^和~的区别
- ^n:某个commit的第n个父commit
- ~n:沿着commit树主干向上搜索n层,并获得该层的第一个commit