看书ing 《Git版本控制管理(第二版)》,记录下笔记
包括快捷键,章节等git
git config -l //查看配置
git config -l --global //查看全局配置
git config 名字 值 //设置字段
git config 名字 值 --blobal //设置全局字段
git config --unset 名字 //删除字段
git config --unset 名字 --global //删除全局字段
git config alias.别名 指令 --global //全局设置别名
复制代码
git对象库里只有四类数据:markdown
git建立对象的时候,git不关心文件名,只对元数据进行sha1计算出散列值,把散列值的十六进制表示做为文件名放进对象库中,在.git/objects目录下,并用第一个字节作目录名分割开编辑器
能够用
find .
查看仓库目录
而后对objects目录下的某个bolb,使用git cat- file -p 散列值
来查看该块的原始内容(若是是引用树的话,会打印引用的树的信息)
散列值太长很差记,能够用git rev-parse 散列值前几位/tag名
打印完整的散列值
能够用git ls-files -s
打印暂存的文件fetch
原git状态:
本地两个文件,已提交,索引(暂存区)树与提交树指向相同 spa
本地编辑了file1:
此时索引与提交树是干净的,可是本地脏了,git status显示unstagedfile 命令行
执行git add file1:
把file1提交到了暂存区,本地变干净了,可是暂存区脏了(跟对象库中最新的提交不一致了),git status显示add file,git会根据修改后的file1建立新的bold,而后将索引树从file1 bolb指向新的bolb,file2由于没变,因此仍旧指向file2 bolb。 版本控制
执行git commit:
把索引内容提交到分支,索引跟对象库中内容一致,仓库从新干净。
执行commit时,git会先根据暂存区的树建立新的提交对象树(双线三角),而后建立提交对象(双线圆)指向该树,同时新的提交对象指向旧的提交对象,master指向新提交对象,此时最新的提交对象的树,与索引的树指向的内容一致 指针
示意图:
HEAD指代当前分支最新的提交日志
gitk 指令显示提交图 强烈建议查看提交图使用sublime merge,直观方便,敲命令行太痛苦了code
git bisect 定位错误用,具体没用过,待研究
git blame 也是定位错误用,也没用过。。。
参数: --stat:显示统计差别,不显示具体内容差别 --color:试用多颜色输出 -w或者--ignore-all-space:比较时忽略空白字符 -S"搜索字符串":能够展现包含字符串的提交的不一样
git merge碰到有冲突时,会终止合并,并提示冲突文件在哪儿
处理完冲突文件后,直接执行git commit(不带参数),会继续merge,提示输入merge commit的文案,保存后merge完成
能够把HEAD指针指向任意一个提交,有三个参数:
git commit --amend 会打开编辑器,修改上次提交信息后,把此次的索引里的内容提交到上次提交的内容中
后面能够加参数--author [做者名 <邮箱>], 直接修改本次提交的做者,邮箱
前向移植:
git rebase [目标分支]:把当前分支的依赖,改到目标分支的HEAD
git rebase [目标分支] [迁移分支分支]:等同于上面
例子: git rebase master topic
迁移提交: git rebase --onto [目标分支] [迁移起点] [迁移分支]
例子:git rebase --onto master maint~ feature
注意,变基操做一次会迁移一个提交,每次迁移均可能会有冲突,出现了就要处理冲突:
交互式变基操做: git rebase -i [交互终止提交]:会打开一个文本编辑器来让你变动如何处理到[交互终止提交]之间的变基处理
- git pull = git fetch + git merge
- git pull --rebase = git fetch + git rebase
区别:merge会把两个分支合并成一个提交,提交图会是两根线,而rebase会吧当前分支变基到目标分支的最新节点上,提交图会是一直线,更好看
更新ing