本文章基于黑马程序javase模块中的"git"部分
先言:git在集成idea中,不同版本的idea中页面显示不同,操作时更注重基于选项的文字;git基于命令操作参考文档实现即可,idea工具继承使用重点掌握
1.git概述
git是目前世界上最先进的分布式文件版本控制系统
分布式:将数据进行拆分,每个数据部署到不同的服务器中,数据独立
版本控制:将一组文件的改动记录下拉,形成版本记录,以便需要时恢复
作用:代码共享(每位开发者把自己的代码上传到云服务器,同时使用git还可以将其他人的代码下载到自己的电脑上),回溯版本,追踪信息
git与SVN区别:
git是分布式的,SVN不是
Git把内容按照元数据(修饰数据的数据)方式存储,而SVN是按照文件
Git分支和SVN的分支不同
Git没有一个全局的版本号,而SVN有
Git内容完整性优于SVN
2,git工作流程

工作区 :在电脑能看见的目录(注意:电脑上的任意目录只要通过指令[git init]就会把目录变成工作区
版本库:工作区有一个隐藏目录 .git ,这个不算工作区,而是git 的版本库
暂存区index:一般存放在 .git 目录下的index文件(git/index)中,所以我们把暂存区有时也叫做索引;其作用是作为缓冲,理解为临时提交的数据,当数据确认的时候可以一次性将所有文件从暂存区提交到本地仓库中;注意,暂存区在版本库中就是一个文件而已
本地仓库:版本库中的一部分;其作用是存在不同版本的代码,例如已完成10%的代码,完成20%的代码
选中任意一个项目,然后右击,选择[打开于]的[Explorer]----目的是为了找到文件在哪里,此时这个文件夹还不是工作区
3,git下载与安装
1,进入官网下载软件,注意存放路径不要有中文:https://gitforwindows.org/;官网慢可以用国内的镜像:https://npm.taobao.org/mirrors/git-for-windows/
2.安装成功之后可以做一个校验

或者在空白位置右击有[git gui here]与[git bash here]就说明已经安装成功了
4,git本地操作
4.1本地操作-初始化工作区
基本指令:
git init:将目录初始化为工作区
git status:查看当前状态
步骤:1.在合适的位置建立一个空目录git-test(命名随意),
2,选中文件夹后右击,选择[git bash here]
输入git innit后会发现git-test下有一个名为.git的文件夹,这就是我们刚刚提到的版本库,这也说明我们的git-test变为工作区
在giit-test下新建一个reanme.txt文件,然后在git输入git status,发现有个红色提示的readme.txt文件,这说明这个文件还没有提交到版本库当中(变绿代表已经提交到暂存区)
4.2 add与commit
命令:git add .
add后面要跟着文件,如果是所有文件就使用 . 表示,表示要把指定文件提交到暂存区
以下展示两种提交方式

如果我们此时输入git status,会发现readme.txt文件变绿
命令:git commit -m '第一个版本提交'
m代表message消息的意思,该命令是把暂存区的所有东西提交到本地仓库,而(root-commit)后面的字符串就是版本号(比如我现在的版本号就是b993d04);此时git status是没有颜色提示的

特别提示:如果是第一次提交出现了弹出狂,需要填写如下内容
1.命令:"git config --global user.emall "123456@qq.com"
说明:指定邮箱,写成自己的常用邮箱
2.命令:"git config --global user.name "自己的英文名字"
说明:指定操作者
4.2 本地操作-差异比较
比较的是暂存区、本地仓库 与工作区之间有无差别
前置条件:打开readme.txt,稍作更改(随意自己写点什么就是了)

此时git status发现,文件又变红了,说明现在这个文件还没上传到暂存区,也没上传到本地仓库

命令:git diff 需要比较差异的文件名
这是比较工作区与在暂存区的区别
命令:git diff head 需要比较差异的文件名
这是比较工作区与本地仓库的区别
命令:git diff --cached 需要比较差异的文件名
这是比较暂存区与本地仓库的区别
- git diff --cached 上一次最后一次提交到工作树中文件(也就是head**)与暂存区内文件的改动。**查看已缓存的改动。


我在reame.txt新增的三行数字都输出出来了,这三行数字前面的加号表示这是我在readme.txt【新增】的内容

回车后啥内容也没有,说明无差异
4.3 本地操作-版本回退
前置条件,先把上文的readme.txt文件提交了,这样子我们才有多于一个版本的版本库
输入:git add .
输入:git commit -m '我的第二个版本'
前置完成之后,开始本部分的学习
命令:git log
查看当前提交日志
命令: git reflog
查看所有操作简短日志
命令: git reset --hard 版本唯一索引值
回退到制定版本



git reset --hard的版本号可以通过git reflog查询

在回到上一个版本的情况下,还是可以输入刚刚被我们回退的那个版本的版本号,这样子就可以恢复如初了
4.4 本地操作-修改撤销
前置:在readme.txt随意新加一行内容


命令:git checkout 文件名称
撤销工作区修改(删除工作区未添加的内容)
命令:git reset head 文件名称
撤销到工作区(把暂存区内容撤销到工作区)


git checkout readme.txt的效果是工作区新修改的内容别撤销了
再手动把readme.txt最后一行加上,然后git add . 提交到暂存区




5 分支(必须掌握)
5.1 概述
分支:几乎每一种版本控制系统都以某种形式维持分支,一个分支代表一条独立的开发线
分支作用:使用分支意味着你可以从开发主线分离开来,然后在不影响主线的同时继续工作
5.2 分支创建与切换
命令:git branch 分支名字
分支的创建
命令:git checkout 分支名字
分支的切换
命令:git branch
分支查看

5.3 分支合并与删除
命令:git merge 分支名字
合并分支
命令:git baranch -d 分支名
删除分支
6 远程仓库
6.1git远程仓库概述
本地仓库:在个人电脑中,用于存储个人提交记录和提交日志的
远程仓库:是公外网中的一个仓库,主要用于存储个人或团队的提交记录和提交日志,团队开发也是远程仓库实现
市面上常用的git支持的远程仓库主要有如下三个:github(面向开源和私有软件项目的托管平台,功能强大,但是在国外,速度一般),gitee(开源中国提出的基于git的代码托管平台,速度快),gitlab(gitlab基于git作为开源的代码托管平台,可以为你搭建一个web服务器,你就可以理解为为自己搭建了一个局域网内能够访问的服务器,也就是私服,保证代码安全性)
6.2gitee(码云)仓库注册创建
1.自行前往官网注册登录
2.创建仓库:点击右上方的+号

6.3 远程仓库操作--关联
复制第一个命令,git remote add origin xxx(xxx的位置要粘贴刚刚复制的链接)

右键选择paste可以粘贴
到这就关联成功了
6.4 远程仓库操作--拉取
拉取命令:git pull
注意:得先将远程仓库的内容拉取到本地才能进行推送;首次拉取 git pull origin master --allow-unrelated-histories
拉去成功可以在本地看见你在gitee上的其他文件

如果进入这个页面想要退出的话,输入:wq!(记得要输入冒号)
6.5 远程仓库操作--推送
命令:git push
注意1:首次推送使用命令git push -u orgin master
注意2 :推送之前保证代码已经正常提交到本地仓库
6.6 远程仓库操作--克隆
步骤:
1,新建一个文件夹
2,输入git clone 指令(直接复制gitee的git clone指令)

7,idea集成git
7.1 集成


7.2在idea上拉git项目


上面那个url是项目的地址,下面的目录是拉下来后存放在本地的位置
填完之后直接clone就可以了,第一次使用会弹出输入线上git网站的用户名和密码。这样就完成了将项目拉下本地的操作了
7.3 将现有项目变成git管理的项目
接下来将当前项目交给git管理

选中项目点击确定之后,发现文件变红,说明这个项目已经交给git进行管理了;同时右上方多了几个按钮。
文件颜色:红色表示该文件未加入到版本控制中;白色表示与git同步,蓝色表示修改,绿色表示新创建


7.4 ADD
为了使得文件改变颜色,需要将红色文件添加到版本控制
以下为方法1:


以下为方法二:选中项目后右击

自动把新文件添加到版本控制:file→setting→version control→confirmation→when files are created 选择add silently
1.移除版本控制:
Rollback ,移除版本控制,针对的未commit过的文件
2.可以从文件的颜色上进行区分:
- 绿色:未commit过的文件
- 蓝色:commit过,修的文件
7.5 上传时忽略相同的配置文件
大家的配置文件都差不多,没必要上传,可以安装插件忽略这些没必要上传的

选第一个进行安装
"未加载marketplace插件检查互联网连接并刷新"
我是多刷新了几次,后来就又能用了
7.6 commit
选中项目后右击,选中【git】的【提交目录】


选择【提交】,左下角提示

7.6
切回项目

随意修改文件试试

发现变蓝了

整个项目中ADD一次就可以(让红色的文件变成蓝色就可以),剩下的我们只需要commit(只要文件是蓝的,不用add,直接commit就可以)
提交方法二:选择那个✔就可以,填完备注就可以提交了


7.7 比较版本间的差异
选中最左下角的【git】可以查看有几个版本
方法一:选中需要的文件或者项目,右击选中[git】,选择【与修订比较】

7.8版本回退撤销
前置:多提交两个版本,方便演示

修改之后不提交,点击圈起来的位置,就会出现回滚图标

接下来展示版本的回退:
选中需要还原回去的版本,右击选中将当前分支重置为此处
软表示把撤回的东西都放在暂存区,混合是把撤回的东西都放在工作区,硬是把东西都删了

8 Idea工具--切换分支和推送(掌握)
8.1 切换分支
注意1:不能再master分支上书写代码,要在自己的分支开发,最后确定没有问题之后再将分支上的代码合并到master分支
注意2:再切换其他分支的之前修改的代码必须先进行提交,否则当前分支的代码就不存在了

右下角的master可以帮助我们管理分支
选中branch1就是切换分支,选中之后再写代码就是在分支写代码,在分支选中的状态下提交就是分支提交代码


这是master下的版本,可以跟branch1下的版本做个对比
8.2 合并master与branch1

选择[将master合并到branch1]中,有冲突就解决冲突,没有冲突就push到远程
9 远程仓库gitlab
注意:gitlab远程仓库只有组长有权限,组员没有权限操作,工作中由组长或项目经历进行操作管理,组长不要随意修改其他人的数据