1.1实现了解为什么要使用git&Github(git有什么优点)
1.大部分操作在本地完成,不需要联网(但是因为是外国网站使用卡,如何解决?)
2.完整性保证
3.尽可能添加数据而不是删除或修改(就比如小刘、小王都对此代码进行修改,但是小刘先提交,最后代码只有小王改的而没有小刘改的(被覆盖了)而git不会出现这样的问题)
4.分支操作非常快捷流畅
5.与Linux命令全面兼容
1.2Git是干什么用的(不重要)
Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。Git是一个开源的分布式版本控制系统,用以有效、高速的处理从很小到非常大的项目版本管理。[2] Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
Torvalds 开始着手开发 Git 是为了作为一种过渡方案来替代 BitKeeper,后者之前一直是 Linux 内核开发人员在全球使用的主要源代码工具。开放源码社区中的有些人觉得 BitKeeper 的许可证并不适合开放源码社区的工作,因此 Torvalds 决定着手研究许可证更为灵活的版本控制系统。尽管最初 Git 的开发是为了辅助 Linux 内核开发的过程,但是我们已经发现在很多其他自由软件项目中也使用了 Git。例如 最近就迁移到 Git 上来了,很多 Freedesktop 的项目也迁移到了 Git 上。
1.3Git的结构
1.4git的代码托管中心
(我们对于这些的了解主要是为了在github上发代码)
代码托管中心的任务:维护远程库
局域网环境下
GitLab服务器
外网环境下
GitHub
码云
本地库和远程库
团队内部协作
跨团队协作
本地库操作
2.1本地库初始化
命令:git init(git和Linux的命令是兼容的,Linux常用命令(为了方便之后出现的Linux的命令在旁边直接附带解释))
问题:为什么不能看.git的目录
答:在Linux中以“.”开头的都隐藏文件
解决方法:在ls-lA
效果:
设置签名
2.2基本操作
2.2.1状态查看操作( git status)
查看工作区、暂存区的状态
2.2.2添加操作(git add[file name])
将工作区的新建、修改添加到暂存区
2.2.3提交操作(git commit-m”commit message”[file name])
将暂存区的内容提交到本地库
2.2.4查看历史记录操作
2.2.5前进后退
2.2.6删除文件并找回
2.2.7比较文件差异
2.2.8命令帮助
2.3分支管理
2.3.1为什么要分支
在版本控制过程中,使用多条线同时推进多个任务
2.3.2分支的好处
同时并行推进多个功能开发,提高开发效率
各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。失败的分支删除重新开始即可。
2.3.3分支操作
实战操作
1.安装
打开Git官网下载安装程序,然后按照默认选项安装即可。
安装完成后,可在window任意窗口右键,打开Git bash软件,弹出一个类似cmd的命令行窗口,证明安装成功。
2.创建文件夹
在当前目录下mkdir <文件夹名称>
3.本地库初始化(设置你的用户名和Email地址)
我们可以查看一下用户名和密码:
注:只能注册一次保存最开始你设置的用户名和密码,后来设置的都没用
如果报错了
假如我们这时候报错,证明Git的用户名和密码没有配置成功,我们还可以这样做:
在用户主目录下找到 .git 文件夹:
然后打开 config 文件,这是专门用来配置和读取相应的工作环境变量的,在里面加上如图所示内容:
这样也就完成了对Git用户名和邮箱的配置。
3.创建版本库
版本库(repository)也叫仓库,可以看做一个目录,这个目录里的所以文件都由Git进行管理,每个文件的修改、删除,Git都能跟踪。
①首先输入git status来查看工作区、暂存区的状态
一般来说我们会的得到这样的一组代码
原因是因为我们没有创建版本库导致的先输入创建一个空文本
输入一些内容,问题如何退出:先esc再:最后wq保存退出
再次输入git status,我们会得到
现在我们添加一下这个文本,当我们再次使用git status查看时就正常了,而输入则会恢复道之前的状态
输入git commit 来进行提交,我们会的得到这样的一个页面:
我们按ESC键命令模式输入:set nu再按i键进入编辑模式,输入,最后按ESC键进入命令模式,再输入:,最后输入wq进行保存就可以了
输入cat good.txt就能看见之前我们在good.txt中添加的文本
注:cat 由第一行开始显示文件内容
当我们再次输入vim good.txt添加新的信息时,
系统知道我们更新了新的内容,我们可以像之前一样输入git add good.txt再输入git commit 提交,再如之前一样。也可以输入git commit -m”...”good.txt
4.版本穿梭
多屏显示控制方式:
空格向下翻页
b向上翻页
q退出
如果添加或修改代码次数较多可以使用git log --pretty=oneline可以方便我们的查看
或者git log --oneline(只选择哈希值的其中一部分+指针)
再者是git reflog (有利于我们的版本穿梭,会显示从第一个版本到达我想去的版本需要几步)
5.前进后退
本质 空指针→HEAD@{移动到当前版本需要多少步}
基于索引值操作【推荐】
当前版本
进行版本穿梭
现在的版本
同样操作回到原来的版本
使用^符号:只能后退
注:一个^表示后退一步,n个表示后退n步
使用~符合:只能后退
git reset --hard HEAD~n
注:表示后退N步
reset 命令的三个参数对比:
--soft参数 仅仅在本地数据库移动HEAD指针
--mixed参数 在本地数据库移动HEAD指针、重置暂存区
--hard参数 在本地数据库移动HEAD指针、重置暂存区、重置工作区
6.删除文件并找回
首先我们先简单的创建一个文本
再将它删除
rm test.txt 删除test.txt的文件(带询问的删除,需输入y才能删除)
当我们再次查看时,就只有我们原先创造的文件,并且这次的操作会不被记录
所以删除这个行为我们也需要进行提交
注:(在此我解释一下我们这里的删除并不是真正意义上的删除只是在我们现在这个版本下此文件不存在,但在上一个版本中他是存在的,其中两个时间点的关联是你已经将这个文件提交了,而我们找回已删除的文本的方法就是返回删除之前的那个版本,如果想要彻底删除,除非你把这个文本库删除掉)
7.比较文件
git diff[文件名] 将工作区中的文件和暂存区进行比较
(我自己的话:将本次改完的文件与改之前的那个版本进行比较)
git diff本地库中历史版本 将工作区中的文件和本地库历史记录比较
(我自己的话:将此次的版本与之前修改的任意一版进行比较)
不带文件名比较多个文件
(我自己的话:将当前版本和之前修改的每一个版本都进行比较)
像这次我将good.txt的文本进行更改
而我对比不带文件名的话它会将所有文件进行对比
8.分支操作
创建分支
git branch[文件名]
查看分支
git branch -v(绿色的地方就是显示你现在所处的分支上,其实后面的蓝字也是我们所在的分支的提示)
切换分支
git checkout[分支名]
这是最终效果
合并分支
①切换到接受修改的分支(被合并,添加新内容)上
git checkout [被合并的分支的文件名]
②执行merge命令
git merge[有新内容分支名]
而最终的效果是我的second.txt文件添加了新的文本
解决冲突
冲突的表现
冲突的解决
①编辑文件,删除特殊符号
②把文件修改到满意的程度,保存退出
③git add[文件名]
④git commit -m”日志信息”
注:此时commit一定不能带具体文件名不然会显示错误
Hash算法(了解)
哈希是一个系列的加密算法,各个不同的哈希算法虽然加密强度不同,但是有以下几个共同点:
①不管输入数据的数据量有多大,输入同一个哈希算法,得到的加密结果长度固定。
②哈希算法确定,输入数据确定,输出数据能够保证不变Ⅰ
③哈希算法确定,输入数据有变化,输出数据一定有变化,而且通常变化很大
④哈希算法不可逆
Git底层采用的是 SHA-1算法。
以下是git分支管理机制,用我自己的话说:
首先我们刚刚了解了Hash的管理原理,而知道它是因为数据改变不断更新加密密码而git是内容更新加密密码改变但是不覆盖原来的加密密码。
而git的分支管理的本质是创建和移动指针
在Java中我们移动指针需要new进行初始化,但是在git中我们可以通过checkout来移动指针HEAD的位置