目录
一、git工作流程
二、初始化本地仓库
要使用Git对我们的代码进行版本控制,首先需要获得本地仓库;本地仓库你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。
1)在电脑的任意位置创建一个空目录(例如Demo)作为我们的本地Git仓库
2)进入这个目录中,点击右键打开Git bash窗口
3)执行命令git init
4)如果创建成功后可在文件夹下看到隐藏的.git目录。
三、基础操作指令
3.1 查看修改的状态
Git工作目录下对于文件的修改(增加、删除、更新)会存在几个状态,这些修改的状态会随着我们执行Git的命令而发生变化。
仓库中记录的是文件的修改记录。工作区: 存储你的代码的。暂存区: 它只是在内存中的一个空间。
本章节主要讲解如何使用命令来控制这些状态之间的转换:
-
git add (工作区 --> 暂存区)
-
git commit (暂存区 --> 本地仓库)
作用:查看的修改的状态(暂存区、工作区)
命令形式:git status
(1)添加了一个文件\
(2)查看修改的状态 报红代表文件还没有添加到暂存区,报绿代表文件还没有提交到本地仓库
3.2 添加工作区到暂存区
我们在工作区里增删改了文件以后,需要将做的修改从工作区转移到暂存区再转移到本地仓库
作用:添加工作区一个或多个文件的修改到暂存区
命令形式:git add 单个文件名 || 通配符
将所有修改加入暂存区:git add .
(1)在工作区添加了一个文件
2)工作区添加到暂存区
3.3 提交暂存区到本地仓库
作用:提交暂存区内容到本地仓库的当前分支
命令形式:git commit -m '注释内容'
添加到本地仓库以后,我们再查看一下修改的状态:
代表没有新的修改了,working tree clean
3.4 查看提交日志文件
作用:查看提交记录
命令形式:git log [option]
options
--all 显示所有分支
--pretty=oneline 将提交信息显示为一行
--abbrev-commit 使得输出的commitId更简短\
(1)git log
(2) git log -all
(3)git log --pretty=oneline
(4) git log --abbrev-commit
(5)可以组合使用
3.5 版本回退
作用:版本切换
命令形式:git reset --hard commitID
commitID可以使用git log 指令查看
查看已经删除的版本记录:git reflog
继续使用git reset --hard 命令可以回退或者前进版本
3.6添加文件至忽略列表
一般我们总会有些文件无需纳入Git 的管理,也不希望它们总出现在未跟踪文件列表。 通常都是些自动生成的文件,比如日志文件,或者编译过程中创建的临时文件等。 在这种情况下,我们可以在工作目录中创建一个名为 .gitignore 的文件(文件名称固定),列出要忽略的文件模式。
在工作区新建一个文件,命名为 .gitignore 注意这个文件后缀名不是txt,全名带后缀名就叫 .gitignore
在这个文件中写你不想上传的文件或者文件夹 文件写全路径,文件夹如果不是空,可以写成xxx/**(多层路径)
四、分支
几乎所有的版本控制系统都以某种形式支持分支。 使用分支意味着你可以把你的工作从开发主线上分离开来进行重大的Bug修改、开发新的功能,以免影响开发主线.
4.1 查看本地分支
命令:git branch
4.2 创建本地分支
命令:git branch + 分支名
可以看到我们又创建了一个分支名字叫jack
4.3 切换分支
切换到我们的jack分支
命令:git checkout + 分支名
4.4 合并分支
将分支(jack)修改的内容合并到master分支 。先将分支切换到master上再合并
命令:git merge 分支名称
4.5 删除分支
不能删除当前分支,只能删除其他分支
git branch -d b1 删除分支时,需要做各种检查。 查看当前分支有没有没合并的内容
git branch -D b1 不做任何检查,强制删除.
4.6 解决冲突
当两个分支上对文件的修改可能会存在冲突,例如同时修改了同一个文件的同一行,这时就需要手动解决冲突,解决冲突步骤如下:
-
处理文件中冲突的地方.
-
将解决完冲突的文件加入暂存区(add)
-
提交到仓库(commit)
冲突部分的内容处理如下所示:
上面这些操作都是对本地仓库来说。
五、Git远程仓库
5.1 常用的托管服务(远程仓库)
前面我们已经知道了Git中存在两种类型的仓库,即本地仓库和远程仓库。那么我们如何搭建Git远程仓库 呢?我们可以借助互联网上提供的一些代码托管服务来实现,其中比较常用的有GitHub、码云、GitLab等。
gitHub( 地址:https://github.com/ )是一个面向开源及私有软件项目的托管平台,因为只支持 Git 作为唯一的版本库格式进行托管,故名gitHub
码云(地址: https://gitee.com/ )是国内的一个代码托管平台,由于服务器在国内,所以相比于 GitHub,码云速度会更快
GitLab (地址: https://about.gitlab.com/ )是一个用于仓库管理系统的开源项目,使用Git作 为代码管理工具,并在此基础上搭建起来的web服务,一般用于在企业、学校等内部网络搭建git私服。 安全性高 银行项目 16G以上
5.2 注册码云(gitee)
要想使用码云的相关服务,需要注册账号(地址: 注册 - Gitee.com )
5.3 创建远程仓库
仓库创建完成后可以看到仓库地址,如下图所示:
本地仓库关联远程仓库地址:
git remote add 名称(默认为origin 可以随便起) 远程仓库的地址。
把本地仓库的代码推送到远程仓库
git push 名称 本地分支名:远程分支名 如果本地分支名和远程分支名相同可以只写一个。
5.4 添加免密登录
我们可以通过公钥来允许其他成员以及自己来访问该仓库。使用: ssh-keygen -t rsa 来帮你生成公钥。四次回车即可生成公钥:本人已经生成过了,如果再生成需要删除掉之前生成的公钥并且gitee中的绑定也要删除,太麻烦了,这里直接上别人的演示图:
根据黑窗口生成的内容,我们可以很轻松的找到公钥的路径,一般都是在c盘
d-sra是私钥,下面被圈中的就是我们需要的公钥。一个公钥只能添加一个远程仓库。假如你得公钥已经被甲某人仓库绑定了,再想绑定其他人的仓库,那只能先解绑甲某人的仓库,再去绑定其他人的仓库。
在gitee中,点击设置,里面有个ssh公钥。将上图中的文件用记事本打开,将里面的内容复制上去,你的公钥就成功绑定上去了。
5.5 场景分析
基于我们后面的实战模式,我们做一个综合练习
当前的开发环境如下,我们每个人都对这个项目已经开发一段时间,接下来我们要切换成团队开发模式。
也就是我们由一个团队来完成这个项目实战的内容。团队有组长和若干组员组成(组长就是开发中的项目经理)。
所有操作都在idea中完成。
练习场景如下:
1、由组长把项目架构搭建起来,基于本项目创建本地仓库;创建远程仓库,推送项目到远程仓库。
2、每一位组员从远程仓库克隆项目到本地中,这样每位同学在自己电脑上就有了一个工作副本,可以正式的开始开发了。我们模拟两个组员(组员A、组员B),克隆两个工作区。
3、组员A修改工作区,提交到本地仓库,再推送到远程仓库。组员B可以直接从远程仓库获取最新的代码。\
4、组员A和组员B修改了同一个文件的同一行,提交到本地没有问题,但是推送到远程仓库时,后一个推送操作就会失败。
解决方法:需要先获取远程仓库的代码到本地仓库,编辑冲突,提交并推送代码。
例子:
我是项目经理。我需要先布置框架,然后把项目放到远程仓库里去,我的项目组员,要先从远程仓库去克隆下来我布置的框架,克隆下来的项目会自动有本地仓库而且会自动和远程仓库关联 。然后他在本地完成他的任务,先拉取代码 (pull),再提交(push)代码。
六、idea关联git
(1)关联git
(2)通过idea创建本地仓库
3)拿到代码后,先新建分支。再分支中写代码。
(4) 当你修改了代码后,先add添加到缓存区再点commit File (因为我没有做任何修改所以我这两个选项是灰色的)
只要做了修改,你修改的文件就会变成蓝色。蓝色代表你还没有保存到本地仓库。
(5) 保存到本地仓库以后,切换到主分支
(6)合并你的分支到master上
(7)这时候就该把你改过的代码放到远程仓库里去,该交差了。交差之前先别急,先把远程仓库的代码拉取一下,看看你再修改的期间,有没有人上传新的版本再远程仓库里。
没有冲突最好,如果有冲突了,该上一个提交的人联络一下感情,商量商量你俩写的东西怎么整合一下。然后再上传
至此,大致流程就结束了。
上面的流程总的来说大致如下: