Git
git中有工作区和暂存区的概念。
工作区内容可以添加到暂存区,暂存区的变动通过索引保存,当commit时,git会使用索引中的文件版本。
比如sourceTree,在commit时会从gui界面形象展示出工作区和暂存区的概念。
又比如git tortoise(小乌龟),在gui上并没有形象展示出暂存区的概念,但是提交界面可以自己手动勾选提交文件,相当于同时把选中的文件添加到暂存区并commit,弱化了暂存区的概念。
保存作者名称和邮箱
git config user.name “zhang"
git config user.email "xxxx@qq.com"
也可以使用GIT_AUTHOR_NAME和GIT_AUTHOR_EMAIL环境变量来告诉git你的信息,这些变量一旦设置就会覆盖所有配置设置。
创建初始版本库
git init
将file添加到版本库
git add [file]
将dir下的文件和子目录递归添加到版本库
git add [dir]
将当前目录以及所有子目录添加到版本库
git add .
查看版本库状态
git status
提交更改
git commit -m "convert to html"
git commit index.html -m "convert to html"
提交所有,即使是不在暂存区的已追踪文件(不包括未追踪文件哦)
git commit -a
或
git commit --all
查看提交记录的三种方式
1、查看提交记录
git log
2、查看特定提交的信息
git show [提交码]
如果不填写 提交码,默认输出最后一次提交
git show
3、提供当前开发分支间接的单行摘要
git show-branch --more=10
“–more=10"表示查看10个版本
查看单个文件的历史记录。即使这个文件改过名也可以查看,但是命令中需要使用改名后的名称。
git log --follow [file]
版本库内删除文件
git rm [file]
git commit -m "xxx"
版本库内重命名文件的两种方法
1、先删除再添加,前提是先用mv为文件改名
先使用mv为文件改名的目的是防止rm文件时将文件删除。
mv index.html a.html
git rm index.html
git add a.html
git comit -m "xxx"
2、直接用mv重命名
git mv a.html b.html
git comit -m"xxx"
整理git底层对象
底层有四种对象类型,存储在**.git/objects**中:
blob对象,本质是一块数据,它什么也不引用。SHA-1值通过数据内容生成,在不同的计算机中只要数据相同,SHA-1就是相同的。(不同数据内容产生相同的SHA-1称之为碰撞,碰撞的几率很小,几乎不可能发生)
树对象,关联blob对象和其他树对象,也就是说树可以引用若干blob对象和其他树对象。
提交对象,关联一个特定的树对象。
标签对象,可以和blob对象、树对象、提交对象相关联,但是一般关联提交对象,也就是说标签对象一般引用一个提交对象。
参考链接:
1、深入理解Git - Git底层对象
2、《Git版本控制管理》
查看暂存文件的SHA1值
git ls-files --stage
从工作目录和索引(暂存)移除一个文件。
因为git rm也是对索引进行操作的命令,所以对于未追踪的文件没有作用。
git rm [file]
将文件从从索引移除,即从暂存区移除。
文件会从已追踪变为未追踪,谨慎使用。
git rm --cached [file]
git rm和git rm --cached区别:
前者对工作目录和索引同时起作用,后者只对索引起作用,并不操作工作目录的文件。
使用git rm删除文件时,git会检查文件是否有更改,如果更改了不能删除。
但是可以使用强制删除:
git rm -f [file]
恢复删除文件。不管是文件被删了,还是暂存区的文件记录删掉了,都可以用此命令恢复。
git checkout HEAD -- [file]
.gitignore文件
通过编写.gitignore文件的方式,忽略一些文件。
1、#注释
2、一个简单 的文件名。匹配任何目录中的同名文件。
3、目录名由正斜杠/标记,能匹配同名目录和子目录,但是不匹配文件或者符号链接
4、包含shell通配符,支持正则表达式。比如*
5、!对该行其余部分的模式进行取反。
注意:
1、每个目录都可以包含.gitignore文件,子目录的忽略文件可以覆盖上层目录的忽略文件。
2、优先级,从高到低:
- 命令行上指定的模式
- 目录中的.gitignore文件模式
- 上层目录的.gitignore文件模式
- 来自.git/info/exclude文件模式
- 来自配置变量core.excludedfile指定的文件中的模式
3、.gitignore文件针对的是未追踪的文件,如果想把以追踪的文件忽略,应该先把该文件设置为未追踪状态:
git rm --cached [想忽略的已追踪文件名称]
适用于整个项目的忽略模式文件应该放在版本库的.gitignore目录中。
只适用于你自己的特定的版本库的忽略模式文件应该放在.git/info/exclude中。
查看特定文件的特定代码最后修改者
git blame -L [开始行数],[结束行数] [文件名]
git blame -L 161,166 source/main.cpp
条件:当前版本库引入了一个错误,又不确当这个错误是在哪个版本引入的。
可以使用git bisect命令,通过二分查找排查出错误是在哪一次提交引入的。
//开启二分查找。终点一般是HEAD;起点是一个你确定没有问题的正确的提交。
git bisect start [终点] [起点]
输入上述命令,版本库切换到终点和起点中间的提交。接下来只需要判断中间提交的正确与否就可以。
如果中间提交没有引入错误,请输入:
git bisect good
如果中间分支已经引入了错误,请输入:
git bisect bad
直至命令行输出如下内容,代表引入错误的提价已经定位:
0b74f1ec077bd5e7da5ec10cc4ed887d1a8c5702 is the first bad commit