当前位置: 首页 > news >正文

实用篇-Git

一、Git初识

git是一个分布式版本控制工具,主要用于管理开发过程中的源代码文件(Java类、xml文件,html文件页面等),通过git仓库来对这些文件进行存储和管理

git仓库分为

本地仓库:开发人员自己电脑上的git仓库

远程仓库:远程服务器上的git仓库

git具有哪些强大的功能,为什么值得我们去掌握?

  1. 代码回溯:可以帮助我们快速回到项目开发过程中代码的某个历史版本
  2. 版本切换:同一个项目的不同版本的代码都是不同的,这些版本可以通过git管理版本切换
  3. 多人协作:项目组多人共同开发同一个项目,使用git可以实现代码协调管理
  4. 远程备份:git通过仓库管理代码,分为本地仓库和远程仓库,远程仓库负责备份

commit:提交,将本地文件和版本信息保存到本地仓库

push:推送,将本地仓库文件和版本信息上传到远程仓库

pull:拉取,将远程仓库文件和版本信息下载到本地仓库

二、Git安装

官网下载地址:http://git-scm.com/download

安装成功后在任意目录点击鼠标右键可以看到如下菜单表示安装完成

Git GUI Here:打开Git图形界面

Git Bash Here:打开Git命令行 (最为常用,我们之后都用这种形式)

三、Git代码托管服务

常用的git代码托管服务

  • gitHub( 地址: https://github.com/),是一个面向开源及私有软件项目的托管平台,因为只支持Git 作为唯一的版本库格式进行托管,故名gitHub
  • 码云(地址: https://gitee.com/),是国内的一个代码托管平台,由于服务器在国内,所以相比于GitHub,码云速度会更快
  • GitLab(地址: https;//about.gitlab.com/),是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务
  • BitBucket(地址: https://bitbucket.org/) ,是一家源代码托管网站,采用Mercurial和Git作为分布式版本控制系统,同时提供商业计划和免费账户

这里我们将会用码云(gitee)代码托管服务来学习

使用码云的操作流程如下

1、注册码云账号

2、登录码云

3、创建远程仓库

4、邀请其他用户成为仓库成员

四、创建码云仓库练习

这个仓库就是远程仓库 

下面我们将通过这个远程仓库,来练习一下常用的git命令

五、Git常用命令

1. git全局设置

设置用户信息

git config --global user.name "keke"     设置全局用户名
git config --global user.email "1781125992@qq.com"  设置邮箱地址

查看配置信息

git config --list

2. git仓库获取

获取git仓库的方式有两种

  • 本地初始化一个git仓库(不常用)
  • 远程仓库克隆(不常用)

2.1 本地git仓库初始化

具体操作如下

1.在任意目录下创建一个空目录(例如repo1)作为我们本地git仓库

2.进入这个目录中,点击右键打开git bash窗口

3.执行命令git init

如果在当前目录中看到.git文件夹(为隐藏文件夹)说明git仓库创建成功

2.2 远程仓库克隆

git clone 远程仓库地址

之前我们在gitee上创建过一个仓库,我们现在把那个仓库克隆到我们本地,注意不能和刚才创建的本地git仓库嵌套

3. 基本概念理解

版本库:前面看到的.git文件夹就是版本库,版本库中存储了许多配置信息、日志信息和文件版本信息

工作区:包含.git文件夹的目录就是工作区,也称为工作目录,主要存放开发的代码

暂存区:.git文件夹中有许多文件,其中一个index文件就是暂存区,也可以叫做stage。暂存区是一个临时保存修改文件的地方

4. git工作区中文件的状态

git工作区中文件存在两种状态:

untracked未跟踪(未被纳入版本控制)

tracked已跟踪(被纳入版本控制):

  1. Unmodified 未修改状态
  2. Modified 已修改状态
  3. staged 已暂存状态

注意:这些文件的状态随着我们执行git命令发送变化

在代码仓库中,未执行add命令,文件状态就是untracked未跟踪状态,即未被git所管理,当执行过add命令后,状态变成staged已暂存状态

5. 本地仓库操作命令

git status            //查看工作区中文件状态
git add   文件名       //将文件的修改加入暂存区
git reset 文件名       //将暂存区的文件取消暂存或者切换到指定版本
git commit -m "提示信息" 文件名      //将暂存区的文件修改提交到版本库
git log                //查看日志
git reset --hard 版本号   //回到某一版本

演示如下

第一步在工作区中手动创建一个user.java文件,并用gitbash在这个目录下打开

执行git status命令 查看文件状态为untracked

执行git add命令 

执行git reset命令,将暂存区中文件取消暂存

执行git commit -m "提示信息" 文件名 

注意刚才提交的user.jave应该是处于unmodified未修改状态,现在我们手动修改该文件,保存,然后查看该文件的状态

对文件修改了,但是未放进暂存区,就是这种红色的modified的提示,下面把他加入到暂存区,用git add命令。可以看到modified变绿,意味着已修改并且放入暂存区状态

提交这个已修改并且放入暂存区状态的user.java

执行git log命令,查看日志信息

可以看到我们有两次commit,后面有这个版本的唯一标识,在"提交"版本中,我们还没有编辑user.java文件,接下来我们回到这个版本

6. 远程仓库操作命令

git remote //查看远程仓库
git remote add //添加远程仓库
git clone //从远程仓库克隆
git pull //从远程仓库拉去
git push //推送到远程仓库

查看远程仓库 

添加远程仓库

我们之前创建的repo1仓库是我们本地初始化的一个仓库,没有关联任何一个远程仓库,我们现在用以下命令给其添加一个远程仓库

git remote add origin 远程仓库地址 

第一步创建一个远程仓库

添加完远程仓库后,远程仓库有更新的内容,就可以克隆到本地仓库,同时本地仓库新增的内容也可以推送到远程仓库

克隆远程仓库

初始化repo1的readme文件,然后克隆到本地的repo2目录下

推送至远程仓库

在刚才克隆远程仓库里新增一个user.txt文件,交给git管理,然后推送到远程仓库中

练习,修改user.txt文件,push到远程仓库

第一步:修改user.txt文件

第二步:git add交给git去管理,然后commit提交到本地仓库,再git push到远程仓库

注意必须仓库成员才可以进行推送代码,还需要进行相应的权限认证

远程仓库拉取

git pull short-name branch-name

注意如果当前本地仓库步是从远程仓库克隆,而是本地创建的仓库,并且仓库中存在文件,此时再从远程仓库拉取文件的时候会报错

解决:可以在git pull命令后加入参数 --allow-unrelate-histories

7. 分支操作

分支是git使用过程中非非常重要的概念。使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线

同一个仓库可以有很多分支,各个分支相互独立,互不干扰

通过git init命令创建本地仓库时默认会创建一个master分支

git branch //查看分支
git branch [name] //创建分支
git checkout [name] //切换分支
git push [shortName] [name] //推送至远程仓库分支
git merge [name] //合并分支

下面我们在码云上创建一个远程仓库,在这个仓库中演示这些命令

第一步:创建远程仓库

第二步:克隆到本地

第三步:查看分支

git branch //查看本地所有分支
git branch -r //查看远程所有分支
git branch -a //查看本地和远程所有分支

第四步:创建分支

git branch [name]

第五步:切换分支

git checkout [name]

第六步:推送本地分支到远程仓库

git push [shortName] [name]

第七步:分支合并

git merge [name]

我们希望b1和b2分支下的b1.txt和b2.txt都合并到主分支master中

首先切换至master分支

git checkout master

然后合并b1分支

git merge b1

出现这个界面,然后按esc键,然后输入:wq即可 

master分支再推送到远程仓库中

git push origin master

8. 标签操作

git tag //列出已有的标签
git tag [name] 创建标签
git push [shortName] [标签名] //将标签推送至远程仓库
git checkout -b p[branch][name] //检出标签

Git中的标签,指的是某个分支某个特定时间点的状态。通过标签,可以方便的切换到标记时状态

比较有代表性的是人们使用这个功能来标记发布结点(v1.0,v1.2等)。下面是mybatis-plus的标签:

下面我们将继续用repo3仓库,来进行标签操作的演示

列出已有标签

创建标签

推送至远程仓库

查看远程仓库

这个v1.0其实就是记录了我们master分支的当前状态

我们新增一个test.txt到本地repo3,然后打一个新的标签,推送到远程仓库

检出标签

新建一个b1.0标签,用来指向repo3仓库的v1.0标签

总结:

tag是git版本库的一个标记,指向某个commit的指针。

tag主要用于发布版本的管理,一个版本发布之后,我们可以为git打上 v.1.0.1 v.1.0.2 …这样的标签。

tag感觉跟branch有点相似,但是本质上和分工上是不同的:

tag 对应某次commit, 是一个点,是不可移动的。
branch 对应一系列commit,是很多点连成的一根线,有一个HEAD 指针,是可以依靠 HEAD 指针移动的。
所以,两者的区别决定了使用方式,改动代码用 branch ,不改动只查看用 tag。

tag 和 branch 的相互配合使用,有时候起到非常方便的效果,例如:已经发布了 v1.0 v2.0 v3.0 三个版本,这个时候,我突然想不改现有代码的前提下,在 v2.0 的基础上加个新功能,作为 v4.0 发布。就可以检出 v2.0 的代码作为一个 branch ,然后作为开发分支

六、IDEA集成Git

1. 在IDEA中配置git

2. git仓库获取

2.1 本地git仓库获取

我们创建一个maven项目,路径如下,现在我们期望用git仓库来管理我们的项目

2.2 远程git仓库获取

.gitignore这个文件的作用是告诉git我们项目中哪些文件不需要git仓库去管理

3. IDEA中使用Git

3.1 本地仓库操作

  • 将文件加入暂存区
  • 将暂存区的文件提交到版本库
  • 查看日志

将文件加入暂存区

新建文件的时候,直接点击添加即可

将暂存区的文件提交到版本库

 查看日志

3.2 远程仓库操作

  • 查看远程仓库
  • 添加远程仓库
  • 断开远程仓库
  • 推送至远程仓库
  • 从远程仓库拉取

查看远程仓库

添加远程仓库

断开远程仓库 (指的是本地和远程仓库的关联关系断开了)

推送至远程仓库

我们新建两个文件,分别是test.txt和波风水门.txt然后推送到远程仓库中

 从远程仓库拉取

由于本地代码和远程仓库完全一致,所以拉取代码没有变化 

3.3 分支操作

  • 查看分支
  • 创建分支
  • 切换分支
  • 将分支推送到远程仓库
  • 合并分支

查看分支

 创建分支

切换分支

将分支推送到远程仓库

合并分支

我们在b100分支中,创建一个helloworld.txt文件,然后合并至master分支

此时master分支下是没有这个文件的 

点击合并 

相关文章:

  • 22款奔驰GLE450升级23P驾驶辅助 智能L2领航
  • 增强swagger
  • 记一次 Android 周期性句柄泄漏的排查
  • pytest中的pytest.ini
  • 长春理工大学漏洞报送证书
  • 【QT】Qt读取ANSI格式文件
  • Bash 4关联数组:错误“声明:-A:无效选项”
  • C++编程案例讲解-使用类模板封装数组类
  • 使用正则表达式模块“re”遇到的错误
  • TensorFlow模型训练常见案例
  • RPA的前景怎么样?
  • GCC编译器命令
  • 【打卡】牛客网:BM37 二叉搜索树的最近公共祖先
  • 用Java(C语言也可以看)实现冒泡排序和折半查找(详细过程图)+逆序数组
  • 复盘多模态需要解决的6个问题
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • bearychat的java client
  • flask接收请求并推入栈
  • If…else
  • JAVA之继承和多态
  • jquery ajax学习笔记
  • JS基础之数据类型、对象、原型、原型链、继承
  • Laravel核心解读--Facades
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • nginx 配置多 域名 + 多 https
  • php ci框架整合银盛支付
  • 机器学习学习笔记一
  • 力扣(LeetCode)22
  • 面试总结JavaScript篇
  • 一份游戏开发学习路线
  • 用element的upload组件实现多图片上传和压缩
  • 看到一个关于网页设计的文章分享过来!大家看看!
  • gunicorn工作原理
  • 积累各种好的链接
  • #include<初见C语言之指针(5)>
  • #include到底该写在哪
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (java)关于Thread的挂起和恢复
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (十六)一篇文章学会Java的常用API
  • (循环依赖问题)学习spring的第九天
  • (幽默漫画)有个程序员老公,是怎样的体验?
  • (转) SpringBoot:使用spring-boot-devtools进行热部署以及不生效的问题解决
  • (转)Scala的“=”符号简介
  • (自适应手机端)响应式新闻博客知识类pbootcms网站模板 自媒体运营博客网站源码下载
  • .Mobi域名介绍
  • .Net 高效开发之不可错过的实用工具
  • .NET/C# 使用反射注册事件
  • .Net下C#针对Excel开发控件汇总(ClosedXML,EPPlus,NPOI)
  • @Autowired标签与 @Resource标签 的区别
  • [ SNOI 2013 ] Quare
  • [ vulhub漏洞复现篇 ] JBOSS AS 4.x以下反序列化远程代码执行漏洞CVE-2017-7504
  • [ 手记 ] 关于tomcat开机启动设置问题
  • [Android Pro] android 混淆文件project.properties和proguard-project.txt
  • [C++]类和对象【上篇】