Git命令基本操作学习笔记
1.初始化
git安装略,要求掌握基本linux指令
本地库初始化
命令:git init
效果:然后就会创建出一个.git隐藏文件,内部有以下文件
注意:存放的是本地库相关的子目录文件,不要删除也不要胡乱修改
设置签名
签名包含用户名和email地址,主要用于区分不同开发人员身份,
注意:这里设置的签名和远程库的账号密码没有任何关系
命令:
git config 项目/仓库级别:尽在当前本地库有效
git config user.name balbala
git config user.email balbala@git.com
git config --global系统用户级别:登录当前操作系统的用户范围,可能不仅仅一个用户
git config --global user.name balbala
git config --global user.email balbala@git.com
注意:项目级别优先级高于系统用户级别,如果两个都有仅采用项目级别,如果仅有系统用户级别,采用后者;不允许两者都没有
效果:
如果是global,那么就在家目录~下有个.gitconfig文件,里面只有user信息
2 提交文件
查看状态/提交文件
用 git status就可以看状态,用add就可以管这个文件
我们随便创建一个文件,
再使用status
开始追踪
再查看状态,绿了,已经添加到暂存区了
我们可以撤销,然后又会变成红色
接下来提交
git commit test.txt
转到下面界面
开启行号,这是在vim里面
这里的意思是填一些备注信息,比如我们这样写然后退出
退出后会有一些信息打印,会包含校验和和我们输入的备注,
在下面就是提交文件个数。文件内行数,模式及文件名
再看一下状态,表示工作区没变,缓存区也没数据
我们这里随意更改一下文件test.txt内容,再看状态,发现检测到被修改,
这个时候如果我们再用add就是更新文件操作而不是上传到工作区,还能用restore恢复修改,变成之前的版本;
我们可以先add再commit或者选择直接git commit -a提交全部,相当于一个命令等于前面两步
我们添加到缓存区,然后我们可以用git restore --staged test.txt取消存入,这里先不取消
然后我们提交 如果跟之前一样的命令会进入vim界面,又要让你输入备注
因为十分麻烦所以我们改为这个命令,引号里面的就是备注
查看操作记录
第一个命令查看历史记录 git log
这里面有个head指针,指向当前的版本,专门用来做版本穿梭
比如说我们再提交了一个版本,这样我们就有三个日志了
如果log过多,可能一页放不下,用空格可以下翻页,b上翻页,q退出;
也可以用这个命令精简显示一行
还可以这样,这样哈希值只会显示其中的一部分而不是全部
还有一个命令可以精致显示更多信息,多了一个commit说明和打括号内的head移动次数
3版本穿梭
版本穿梭
有三种,分别是基于索引,异或^或者非~;
通常使用索引进行操作
首先我们先用reflog查看指针偏移量
我们这样输入,红框是第二个版本的哈希值,复制记得用右键复制
再查看就会发现head已经偏移了,同时会记录版本穿梭的操作本身,然文件内部信息也会做出相应的改变
在比如说我们想往前走,同理输入对应的哈希值就可以了,可以任意穿梭
第二种方式就是利用异或符号进行穿梭,但是这种方式只能用于版本回退,可以看到这样就退回了倒数第二个版本,只退了一步
值得注意的是,如果这个时候用这个命令,只会显示之前的版本,而且不会显示本身回溯操作
如果我想回退多个版本,可以多写几个^,比如我们回到第三个版本
这样就能连续后退两个版本
但是如果有多个版本需要回退,总不能一直敲^,因此我们可以用~来替代比如这样
reset命令其他版本
除了hard还有soft或者mixd选项, 简单说一下区别:
soft只是再本地库移动head指针,并不会触碰暂存区和工作区,
mixd会移动本地库head指针,也会重置暂存区,但是不会碰工作区
hard移动本地指针后还会重置工作区和暂存区和本地库
比如这样我们就移动了指针,但是本地文件内容并没有任何变化,因为内容太乱了我就不打开看了。
我们看一下暂存区,发现有了变化,虽然我们并没有动里面的文件,这是因为暂存区的更改与否并不是由暂存区内文件单独决定,由于指针发生变化, 工作区文件也变化,但是我们本地和缓存一致,就是说已经追踪上了,因此它在提示我们提交。
重置指针,我们尝试用一下mixed,发现指针和缓存区动了,但是工作区和本地没有动,因为本地和缓存区不同因此,我们需要重新追钟本地文件再提交
4 找回删除文件
删除文件后恢复
我们新建一个文件aa,随便输入内容
先追踪并提交
我们先删除这个文件,比如说我们是不小心删除的
我们查看以下状态
我们把删除的状态添加到暂存区,让暂存区的文件也删除,rm也可以
最后提交,让工作区也删除,其实本地库会有一条记录,这并不是真正删除,他只是增加了一条记录,因此其实是可以恢复的,尽管我们在这里删除了;
我们可以用reflog看一下操作日志
我们只需要执行穿梭指令就可以恢复
添加到暂存区的删除文件找回
我们再新建一个文件bb
还是添加并提交
我们删除文件,并添加到缓存区,但是我们还没有提交到本地库
我们这个时候这样操作,就能撤销删除,因为我们本地库有记录直接覆盖就行
5 比较文件
承接上文,我们先修改bb文件,加了一行b,保存退出
我们可以用这个命令进行比较,删除的会变红(忘删了),增加的会变蓝,变色是以行为单位,如果针对一行后添加,会被翻译为删除原行增加后一行
如果我们追踪后再比较,会发现并没有什么区别,表示默认是与暂存区比较
如果我们想与本地库进行比较可以这样写,发现又有差异了
甚至我们还可以与某个历史版本比较
全是新增加的,因为上次根本没创建文件
如果我们不指定文件名,会自动对比对应版本差异
6.文件分支
基本概念
比如我们开发一个软件,针对不同的功能进行并行得功能开发,这样可以提搞开发效率;
就算是某个分支发开失败了,也不会对其他分支产生印象,直接删除重新开始就行了;
查看分支
通过这个命令就可以查看分支,master分支再初始化后自动就有,不需要欸外创建
创建分支
通过这个命令就可以创建新的分支,绿色表示目前所在分支位置
切换分支
这个命令可以切换分支
分支合并
我们目前在hot-fix分支下,比如说我们在这个分支下对文件bb进行操作,添加一一行c
我们同样对分支文件进行追踪并提交到本地库
我们再查看分支信息,就发现hot_fix分支往前推进了一部,这两分支对应的hash值不相等了
加入我们希望将刚才对bb文件的修改对master分支也生效,就需要用到分支合并操作,
首先我们要切换到被合并的分支上
然后我们执行merge命令,merge对象是有新内容的分支(时间戳)
我们再看一下bb文件,发现master分支下bb文件也有相应的修改、
再看分支状态,俩hash数也就一样了
分支冲突表现
模拟一下分支冲突以及解决方案
首先修改master下的bb文件,增加一行d,保存退出
然后追踪并提交文件到本地库,我们发现master分支往前走了一步
然后我们切换到hot_fix
同样增加一行e,保存退出
追踪并提交
查看分支状态,俩分支都对同一文件同一行做了不同的修改w
我们直接在hot_fix上把master合并,提示冲突,需要手动合并,注意红框内蓝色字,表示处于正在合并状态
这个状态下并不会像svn一样产生额外的文件
但是再文件内部会显示冲突内容
HEAD表示当前指向的分支,也就是hot_fix,从等号到结尾是另外一个分支的内容
分支冲突解决
直接打开vim编辑文件到自己满意的程度,保存退出
查看状态,提示我们利用add更改状态为冲突已解决状态
这个时候显示冲突已经修复但是状态仍然在未合并状态,提示我们用commit进入已经合并的状态。
以往我们都是利用带文件名的命令行,但是这里会报错
这种冲突的时候我们不能带文件名,但是c日志还是需要的
再看一下status,冲图已经被修复了,有人进入了正常的分支状态