git版本控制管理

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值