git学习笔记二
git常见命令
git config
git config用来配置Git,它可以配置三个作用范围(system,global,local),通常我们用git config设置名字和邮箱地址,这两个信息在提交代码时,能让其他人看到是谁提交的代码。
git config --global user.name “hzn”
git config --global user.email "test@163.com"
配置级别
system[低优先级]:影响到全系统的git仓库,存储在/etc/gitconfig文件中
global[中优先级]:影响到所有当前用户的git仓库,存储在~/.gitconfig中
local[默认,高优先级]:只影响本仓库,存储在.git/config中
在git config中还可以配置其他东西,比如编辑器等等,更多可以查看https://git-scm.com/book/zh/v1/%E8%87%AA%E5%AE%9A%E4%B9%89-Git-%E9%85%8D%E7%BD%AE-Git
git status
查看git仓库信息
git status可以查看文件的跟踪状态,工作区与暂存区,暂存区与最新提交的状态跟踪。
在git中,状态总共有两种,一种是内容状态,一种是文件状态,内容状态主要针对工作目录、暂存区与提交区之间的状态变化;文件状态主要是指文件是否已跟踪,分为未跟踪与已跟踪状态。
git init
初始化git仓库,主要会生成.git隐藏目录,用来保存元数据以及对象数据库的地方,这个目录可以说是Git的核心,每次克隆镜像仓库时,实际上拷贝的这个目录里的内容而已,然后再根据这个目录恢复工作目录。(工作目录:你所git init的目录,但不包含.git这个隐藏的目录),即在工作目录下生成相应的项目文件和目录。而我们的暂存区也位于这个.git目录之下,名为index,它一般很小,一般不超过1KB左右,这和它存储的内容是有关系的。
git操作内容/文件命令
git add
添加文件内容到暂存区(同时文件被跟踪)
git add可以分两条底层命令实现:
git hash-object <文件名> git update-index <文件名>
运行第一条命令,Git将会根据新生成的文件产生一个长度为40的SHA-1哈希字符串,并在.git/objects目录下生成一个以该SHA-1的前两个字符命名的子目录,然后在该子目录下,存储刚刚生成的一个新文件,新文件名称是SHA-1的剩下的38个字符。
第二条命令将会更新.git/index索引,使它指向新生成的objects目录下的文件。
.gitignore文件
它是忽略文件,仅仅作用与未跟踪文件,再添加跟踪文件时过滤匹配文件。
git rm
从暂存区删除文件 --cached参数表示是否只删除暂存区
git rm --cached 仅从暂存区删除
git rm 从暂存区与工作目录删除
小技巧
git rm ${git ls -files --deleted} 删除所有被跟踪,但是在工作目录被删除的文件
git commit
根据暂存区内容创建一个提交记录,通常在提交时候,会加上-m参数。-m 帮助我们对这个命令进行一个注释,使用log命令的时候可以得到一个友好的提示
直接提交,将工作目录的文件内容提交到提交区,-a参数
git log
显示提交历史信息
显得更加美观的输出
git log --graph --pretty=format:’%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset’ --abbrev-commit
查看log输入太长串的命令,不太显示,因此可以设置别名
git config --global alias.lg “log --graph --pretty=format:’%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset’”
git lg
git输出可以定制化,多种颜色和自定义log格式,更多可以查看官网的相关资料。
git diff
显示不同版本差异
git checkout
撤销本地修改,将暂存区内容复制到工作目录,相当于工作目录没有修改
git reset
撤销暂存区内容,将提交区的内容复制到暂存区,相当于工作目录没有add
撤销全部改动
git checkout HEAD –
总结
文件是否跟踪通过git add与git rm
分支命令
git branch
分支的增删改查命令
git branch
git branch -d
git branch -v
当使用git branch next,它会在head所在指向commit对象上创建一个另外的引用
这是运行git commit
next指针没有变动,是因为没有切换到它身上,可用git checkout命令来切换分支
git checkout
通过移动HEAD检出版本,可用于分支切换
git checkout
git checkout -b
git checkout
运行git chechout next将head指针移动到next指针处
git commit后
使用git branch -v可以查看当且所处分支
git reset
将分支回退到某个历史版本
git reset --mixed (默认) 将内容复制到暂存区
git reset --soft 不会改变暂存区与工作目录
git reset --hard 将内容复制到暂存区与工作目录中
注意git reset时候回到到一个没有引用的版本时,切记不要进行增伤改操作,因为没有引用,切换到另外一个分支时,这部分的修改可能会被垃圾回收掉。
git reflog
通常记录记录提交的SHA不太理想,可以采用下图中的符号来回退到某个想要的版本
reset checkout的对比
git stash
git merge
远程配置命令