一.Git概述?
1.什么是Git?
Git是一个分布式版本控制,主要用于管理开发过程中的源代码文件(Java类、xml文件、html页面等),在软件开发过程中被广泛使用。
2.通过git我们可以:
(1)代码回溯:快速的回到某个代码历史版本
(2)版本切换:同一个项目可以有多个版本,每个版本代码可能不一样。比如mybatisplus有多个版本
(3)多人协作:多个人共同开发同一个项目
(4)远程备份:通过仓库方式管理代码
3.Git工作流程图
(1)本地仓库和远程仓库:
①本地仓库:开发人员自己电脑上的Git仓库
②远程仓库:远程服务器上的Git仓库
(2)commit:提交,将本地文件和版本信息保存到本地仓库
(3)push:推送,将本地仓库文件和版本信息上传到远程仓库
(4)pull:拉取,将远程仓库文件和版本信息下载到本地仓库
4.工作区、暂存区、版本库 概念
(1)版本库:.git 隐藏文件夹就是版本库,版本库中存储了很多配置信息、日志信息和文件版本信息等
(2)工作区:包含 .git 文件夹的目录就是工作区,也称为工作目录(和.git同级的一层),主要用于存放开发的代码
(3)暂存区:.git 文件夹中有很多文件,其中有一个index文件就是暂存区,也可以叫做stage。缓存区
是一个临时保存修改文件的地方。
补充:Git工作区中的文件存在两种状态:
①unstaged:未暂存(修改已有文件,即:之前已经有人提交过了,你现在又修改了该文件)
②untracked:已跟踪(新创建一个文件)
注意:这些文件的状态会随着我们执行Git的命令发生变化
5.Git的下载与安装
(1)下载地址:https://git-scm.com/download
(2)安装完成后在任意目录点击鼠标右键,如果能看到如下菜单则表示安装完成:
①Git GUI Here:打开Git图形界面
②Git Bash Here:打开Git命令行
6.Git代码托管服务
Git中存在两种类型的仓库,即本地仓库和远程仓库。那么我们如何搭建Git远程仓库呢?
我们可以借助互联网上提供的一些代码托管服务来实现,其中比较常用的有GitHub、码云、GitLab等。
(1)GitHub(地址:https://github.com/),是一个面向开源及私有软件项目的托管平台,因为只支持Git作为唯一的版本库格式进行托管,故名gitHub
(2)码云(地址:https://gitee.com/),是国内的一个代码托管平台,由于服务器在国内,所以相比于GitHub,码云速度会更快
(3)GitLab(地址:https://about.gitlab.com/),是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务
二.Git常用命令
1.Git全局设置
当安装完Git后首先要做的事情是设置用户名称和email地址。这是非常重要的,因为每次Git提交都会使用该用户信息
(1)设置用户信息
①git config --global user.name “XXX”
②git config --global user.email “XXX”
(2)查看配置信息:git config --list
注意:上面设置的user.name和user.email并不是我们在注册码云账户时使用的用户名和邮箱,此处可以任意设置。
2.获取Git仓库:
(1)要使用Git对我们的代码进行版本控制,首先需要获得Git仓库
(2)获取Git仓库通常有两种方式:
①在本地初始化一个Git仓库(不常用)
②从远程仓库克隆(常用)
2.1 在本地初始化Git仓库步骤如下:
(1)在任意目录下创建一个空目录作为我们的本地Git仓库
(2)进入这个目录中,右键打开Git bash窗口
(3)执行命令git init
(4)执行后,如果在目录中看到 .git 文件夹(此文件夹为隐藏文件夹)则说明Git仓库创建成功
2.2 获取Git仓库—从远程仓库克隆:
(1)可以通过Git提供的命令从远程仓库进行克隆,将远程仓库克隆到本地
(2)命令形式:git clone 远程Git仓库地址
4.本地仓库操作常用命令
(1)git status 命令用于查看文件状态
(2)git add 命令的作用是将文件的修改加入暂存区
①git add 文件名 // 将指定文件加入缓存区
②git add . // 将所有文件加入缓存区
(3)git reset 命令的作用是将缓存区的文件取消暂存或者是切换到指定版本
例如:git reset --hard 日志版本标识符(日志版本标识符通过git log命令可以查看)
(4)git commit -m "随意写一些提交信息" 将暂存区的文件修改提交到版本库(-m表示message信息)
(5)git log [options] (git log命令就能查看日志)
补充options:
①–all:显示所有分支
②–pretty=oneline:将提交的信息显示为一行
③–abbrev-commit:使得输出的commitID更简短
④–graph:以图的形式显示
(6)为常用指令配置别名(可选)
有些常用的指令参数非常多,每次都要输入好多参数,我们可以使用别名。
①打开用户目录,创建 .bashrc 文件
部分windows系统不允许用户创建点号开头的文件,可以打开gitBash,执行 touch ~/.bashrc
(~代表当前用户的根目录)
②在 .bashrc 文件中输入如下内容
#用于输出git提交日志 alias git-log='git log --pretty=oneline --all --graph --abbrev-commit' #用于输出当前目录所有文件及基本信息 alias ll='ls -al'
注意:HEAD就是个标记,指向谁,谁就是当前分支
(6)版本回退
①作用:版本切换
②命令形式:
git reset --hard commitID
③查看已删除的记录
git reflog
(7)添加文件至忽略列表
一般我们总会有些文件无需纳入Git 的管理,也不希望它们总出现在未跟踪文件列表。 通常都是些自动
生成的文件,比如日志文件,或者编译过程中创建的临时文件等。 在这种情况下,我们可以在工作目录
中创建一个名为 .gitignore 的文件(文件名称固定),列出要忽略的文件模式。
5.远程仓库操作的常用命令
(1)git remote
①如果想查看已经配置的远程仓库服务器,可以运行 git remote 命令,它会列出每一个远程服务器的简写。
②如果已经克隆了远程仓库,那么至少应该能看到 origin ,这是Git 克隆的仓库服务器的默认名字
(注意:通过git remote -v 还可以查看远程仓库地址)
(2)git remote add shortname url 添加一个新的远程Git仓库,同时指定一个可以引用的简写
(shortname是远程仓库名字简称,我们一般定义为origin)
(3)git clone url
如果你想获得一份已经存在了的Git远程仓库的拷贝,这时就要用到 git clone 命令。Git克隆的是该 Git 仓库
服务器上的几乎所有数据(包括日志信息、历史记录等),而不仅仅是复制工作所需要的文件。
(4)git push【remote-name】【branch-name】 推送到远程仓库
remote-name就是我们定义的shortname,branch-name是分支名字
(5)从远程仓库抓取和拉取
远程分支和本地的分支一样,我们可以进行merge操作,只是需要先把远端仓库里的更新都下载到本地,再进行操作。
1)抓取命令:git fetch [remote-name] [branch-name]
①抓取指令就是将仓库里的更新都抓取到本地,不会进行合并(例如push到origin/master下后,拉取时只会拉取origin/master,而不会将远程仓库的origin/master合并到本地的master下)
②如果不指定远端名称和分支名,则抓取所有分支
2)拉取命令:git pull [remote-name] [branch-name]
①拉取指令就是将远端仓库的修改拉到本地并自动进行合并,等同于fetch+merge(本地的master下可以合并远程的origin/master)
②如果不指定远端名称和分支名,则抓取所有并更新当前分支
5.1配置SSH钥
(1)生成SSH公钥
①打开git窗口输入命令:ssh-keygen -t rsa
②不断回车,如果公钥已经存在,则自动覆盖
(2)Gitee设置账户共公钥
获取公钥:cat ~/.ssh/id_rsa.pub
6.分支操作
分支是Git使用过程中非常重要的概念。使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发
主线。同一个仓库可以有多个分支,各个分支相互独立,互不干扰。
注意:通过git init 命令,创建本地仓库时默认会创建一个master分支
(1)git branch // 查看所有本地分支
①git branch -r // 列出所有远程分支
②git branch -a // 列出所有本地分支和远程分支
(2)git branch name // 创建本地分支
(3)git checkout name // 切换分支
注意:我们还可以直接切换到一个不存在的分支(创建并切换)
git checkout -b 分支名
(4)推送到远程仓库
git push [-f] [--set-upstream] [远程名称 [本地分支名][:远程分支名]]
1)如果远程分支名和本地分支名称相同,则可以只写本地分支
git push origin master
①-f 表示强制覆盖(如果远程和本地内容不同,本地新修改的内容强制覆盖远程,基本不用)
②--set-upstream 推送到远程的同时并建立起和远程分支的关联关系
git push --set-upstream origin master:master
③如果当前分支已经和远端分支关联,则可以省略分支名和远端名
此时git push就是将master分支推送到已关联的远端分支
2)查看本地分支与远程分支的关联关系
git branch -vv
(5)git merge name // 合并分支(一般我们都是切换到主分支下,合并其他分支内容到主分支下)
(6)删除分支
①git branch -d b1 删除分支时,需要做各种检查
②git branch -D b1 不做任何检查,强制删除
(7)解决冲突
当两个分支上对文件的修改可能会存在冲突,例如同时修改了同一个文件的同一行,这时就需要手动解
决冲突,解决冲突步骤如下:
① 处理文件中冲突的地方
② 将解决完冲突的文件加入暂存区(add)
③ 提交到仓库(commit)
(8)开发中分支使用原则与流程
几乎所有的版本控制系统都以某种形式支持分支。 使用分支意味着你可以把你的工作从开发主线上分离开来
进行重大的Bug修改、开发新的功能,以免影响开发主线。在开发中,一般有如下分支使用原则与流程:
①master (生产)分支
线上分支,主分支,中小规模项目作为线上运行的应用对应的分支;
②develop(开发)分支
是从master创建的分支,一般作为开发部门的主要开发分支,如果没有其他并行开发不同期上线
要求,都可以在此版本进行开发,阶段开发完成后,需要是合并到master分支,准备上线。
③feature/xxxx分支
从develop创建的分支,一般是同期并行开发,但不同期上线时创建的分支,分支上的研发任务完
成后合并到develop分支。
④hotfix/xxxx分支,
从master派生的分支,一般作为线上bug修复使用,修复完成后需要合并到master、test、develop分支。
⑤还有一些其他分支,例如test分支(用于代码测试)、pre分支(预上线分支)等等。
7.标签操作
Git中的标签,指的是某个分支某个特定时间点的状态。通过标签,可以方便的切换到标记时的状态。比较
有代表性的是人们会使用这个功能来标记发布结点(v1.0、v1.2等)。下面是mybatis-plus的标签:
(1)git tag 列出已有标签
(2)git tag name 创建标签
(3)git push shortName name 将标签推送至远程仓库
(4)git checkout -b 【branch】【name】 检出标签,检出标签时需要创建一个分支
三.在Idea中使用Git
1.在Idea中配置Git
在idea中使用Git,本质上还是使用本地安装的Git软件,所以需要在Idea中配置Git
2.获取Git仓库
(2)从远程仓库克隆
注意:.gitignore文件定义了项目中哪些文件不需要Git管理
3.本地仓库操作
(1)将文件加入暂存区(右键点击需要加入的文件)
(2)将暂存区的文件提交到版本库
①方式一:
②方式二:
(3)查看日志
4.远程仓库操作
(1)右键点击可以查看并管理远程仓库
(2)推送至远程仓库
(3)从远程仓库拉取
5.分支操作在右下角
6.IDEA集成GitBash作为Terminal