1、什么是Git
Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
Git是Linus Torvalds 为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件
官网:https://git-scm.com
2、git安装及基本使用
下载后,一路下一步安装即可(可以改变安装路径)
全局配置:
配置用户名:git config --global user.name "zhangsan"
配置邮件: git config --global user.email "zhangsan@sina.com"
查看配置信息
git config -l list
查看git的版本信息
git version
3、git的相关概念及工作原理
工作区:需要git来管理的文件夹---可以是一个文件夹,也可以是项目的根目录
暂存区:把工作区的修改后的文档 通过 add 操作,提交到暂存区
分支: 存放 暂存区里通过 commit 操作提交过来的文档
仓库: 工作区+暂存区+分支
本地仓库:在自己的电脑中,供自己使用
远程仓库:团队成员共同使用
远程仓库的内容必须下载到本地仓库,文件必须从本地仓库才能提交到远程仓库
原理图:
4、本地仓库操作
1、新建本地仓库
git init
进入某个文件夹内部:在地址栏输入cmd 回车 输入命令 git init 回车
当前文件夹就被初始化为仓库 ,称为工作区 里面多了隐藏文件.git
工作区不包含.git文件
暂存区及分支在.git中
2、查看仓库的状态
查看文件是否添加到了暂存区,是否提交到了分支
输入命令:git status
执行后,如果文件的颜色是红色,说明红色名字的文件没有从工作区,add到暂存区里
3、把文件从工作区添加到暂存区
git add . 添加全部文件
git add java.txt 添加某个文件
4、把暂存区的文件,提交到分支中
git commit -m "注释内容"
5、远程仓库
gitee.com
先注册账号、然后登录
创建仓库
创建仓库后会有如下地址:https://gitee.com/zhang_san/java2105.git
6、远程仓库的操作
一、上传到远程仓库 push
1、 把本地仓库和远程仓库关联,关联和本地仓库和远程仓库之间就可以进行clone、pushu、pull操作
进入到本地仓库中
git remote add origin https://gitee.com/zhang_san/java2105.git
origin:是关联的远程仓库的一个简化名字
2、可以查看远程仓库地址
git remote -v
3、把本地仓库 中已经提交到分支中的文件 推送到远程仓库里
git push origin master
默认提交到originf对应的远程仓库的名字叫做master的分支里
二、克隆 clone
当第一次从远程仓库下载代码及文件时使用,克隆操作会在拉取文件的同时,把当前文件夹初始化为本地仓库
git clone https://gitee.com/zhang_san/java2105.git
三、拉取文件
git pull origin master
7、分支
分支:就是版本文件最终存放的位置
无论是本地仓库还是远程仓库,都默认使用的是master的分支
在企业中往往使用master分支存放已经确定(测试通过,无需修改)的文件
还未最终确定的代码往往使用新建的其他分支
操作:
1、查看分支
git branch
【说明】默认只有一个名字为master的分支
使用哪个分支,哪个分支的颜色为绿色
2、创建分支
git branch 分支名字
3、切换分支
git checkout 分支名
8、分支的使用
1、默认使用主分支,把主分支的内容提交到远程服务器 hello
2、切换分支,修改文件,本地仓库提交 进行两次
dev1 和master分支 的内容是一致的
hello
zhangsan 提交一次
lisi 提交第二次
3、切换到 master分支
hello
yinzuen 提交一次
4、两个分支进行合并
在master进行合并 ,合并dev1分支
合并会产生冲突
【注意】在解决冲突后,记住要删除 <<<<HEAD 等标记
5、重新 add 及commit
【强调】当前在哪个分支中,会把其他分支合并到当前分支,并没有把当前分支的内容合并到其他分支
9、idea整合git
1、把idea和Git进行关联----bin目录下的git.exe
2、在项目的根目录下创建一个.gitignore文件
这个文件里的内容,不会提交到仓库里,会被忽略掉
3、创建本地仓库
当前项目所在的根目录就是仓库
4、把工作区的红色文件 add到本地仓库的暂存区里
添加后,文件编程绿色的
5、把暂存区的文件提交到commit到分支中
默认的是master分支
弹出窗口如下:
本地仓库操作结束
把本地仓库的代码通过idea 上传到远程仓库
创建了远程仓库:仓库的名字要和项目名一致
https://gitee.com/zhang_san/mavenpro2.git
6、上传到远程仓库
弹出窗口如下:
弹出窗口如下:
单击 OK 后 又弹出登录窗口
单击 Log In 按钮 ,进行登录
在弹出的窗口中,单击 push 按钮即可
就把本地的内容提交到了远程服务器上
7、clone操作
当第一次从远程服务器上获取代码时,需要克隆clone操作
1、打开idea
2、进行如下操作
弹出窗口如下:
【说明】克隆的位置必须是一个空的文件夹,名字最好和远程仓库名相同
单击 Clone 按钮后, 则进行文件的下载,下载后弹窗如下:
单击Yes 打开下载的代码
8、日常工作中,如果本地新建了代码文件,测试好没有问题后
先本地仓库 add commit
然后远程仓库 push 菜单如下:
在弹出的窗口中
本地的文件就上传到了服务器
9、每天早晨上班打开电脑后,通常会到远程服务器下拉取最新代码
拉取了服务器的最新代码
10、冲突
两个人修改了同一个文件,先push的人没有问题,后push的就会提示冲突
Emp.java
张三:修改了, 修改后 先add commit 再push 没问题
我:增了一个属性 当我进行push操作时
git检测:目前服务器上push的文件和我pull文件已经发生变化,说明别人改动,发生冲突
出现如下窗口:
通过合并解决冲突,单击Merge按钮 ,弹出窗口如下:
单击 Merge 按钮 后,弹窗如下:
然后重新push
11、常见问题
1、远程服务器的账号修改了密码,那么本地还按原来的密码进行连接,肯定连接不上
2、如何避免冲突
在修改文件之前,先pull最新的文件,有效避免掉部分冲突
12、提交回滚
1、本地未commit
变更文件
代码Pull下来之后 在此基础上进行修改,想回到最初的拉下来状态,
要是发现代码需要想反回滚
通过Show History 就可以找到了
新增文件
直接delete删除
2、commit但是未push
仅限于当前这一个git进行回滚
最后一次git的时候 使用Undo Commit(仅限于最后一次git来使用)
drop Commit (任意一条git都可以使用 不会在git上留下新的抹除代码的记录) 使用最多
点击之后点击右下角的undo 就会再次出现
revert Commit(任意一条git都可以使用 但会在git上留下新的抹除代码的记录)
drop Commit 和 revert Commit 的区别就是一个回滚代码不会留下记录 一个会留下记录
【注意】一般不建议将中间的记录进行回滚因为会产生Merge的情况,这种合并情况的后果可能导致项目无法运行
如果回滚出现Merge的情况想终止 先点击close 但是并没有结束
点击三角形感叹号
点击Abort Rebase 才是结束
从当前一直到后面的所有记录全部回滚掉
soft
在选定提交之后所做的所有更改都在缓存区commit的内容都会保留,其新增文件+文件变更都在缓存区
mixed
在选定提交之后所做的更改将被保留,但不会暂存以进行提交,commit的内容都会保留,新增文件在工作区,文件变更在暂存区
hard
在选定提交之后所做的所有更改都将被丢弃(暂存和已提交) commit的内容 + 暂存区的内容全部被丢弃
keep
在选定提交之后的已commit内容将被丢弃,但未commit的部分将保留 commit部分内容被丢弃,未commit部分保留
3、commit并且push
Git一般都是保护远程分支的,所以我们需要reset + force push
直接强推 然后再正常的提代码