Git:版本控制控制软件

主要内容

  • 常用的版本控制
  • Git简介
  • Git的基本使用
  • Git的指令
  • 远程仓库操作
  • IDEA中操作Git
  • 冲突问题解决

学习目标

知识点 要求
常用的版本控制 掌握
Git简介 掌握
Git的基本使用 掌握
Git的指令 掌握
远程仓库操作 掌握
IDEA中操作Git 掌握
冲突问题解决 掌握

一、 前言

1. 为什么要使用版本控制软件

​ 在公司中当多人同时开发一个项目时,最后是如何把自己写的代码和别人写的代码整合到一起的?肯定不是把我写的文件复制给其他人,其他人把文件粘贴到他的项目中?这么做太Low了。

​ 在项目中如果碰到问题,把自己的代码”改乱了”,不小心把自己代码文件删除了,想要恢复怎么办?肯定不是每天都把自己的代码复制出来一份,放到一个文件夹里?这么做太Low了。

​ 这些问题都可以使用版本控制软件完美的解决。

2. 市场上那些版本控制软件

2.1 CVS

​ CVS是个基于RCS文件的版本控制系统。每个CVS文件都不过是普通的文件,加上一些额外信息。这些文件会简单的重复本地文件的树结构,不支持分布式,CVS比较慢。

2.2 SVN

​ SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器那里得到最新的版本,然后干活,干完后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,如果在局域网还可以,带宽够大,速度够快,如果在互联网下,如果网速慢的话,就郁闷了。

​ 下图就是标准的集中式版本控制工具管理方式:

​ 集中管理方式在一定程度上看到其他开发人员在干什么,而管理员也可以很轻松掌握每个人的开发权限。

​ 但是相较于其优点而言,集中式版本控制工具缺点很明显:

  1. 服务器单点故障
  2. 容错性差

2.3Git

​ Git是分布式版本控制系统,那么它就没有中央服务器的,每个人的电脑就是一个完整的版本库,这样,工作的时候就不需要联网了,因为版本都是在自己的电脑上。既然每个人的电脑都有一个完整的版本库,那多个人如何协作呢?比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。

​ 下图就是分布式版本控制工具管理方式:

二、Git简介

1. Git历史

​ 同生活中的许多伟大事件一样,Git 诞生于一个极富纷争大举创新的年代。Linux 内核开源项目有着为数众广的参与者。绝大多数的 Linux 内核维护工作都花在了提交补丁和保存归档的繁琐事务上(1991-2002年间)。到 2002 年,整个项目组开始启用分布式版本控制系统 BitKeeper 来管理和维护代码。

​ 到 2005 年的时候,开发 BitKeeper 的商业公司同 Linux 内核开源社区的合作关系结束,他们收回了免费使用 BitKeeper 的权力。这就迫使 Linux 开源社区(特别是 Linux的缔造者 Linus Torvalds )不得不吸取教训,只有开发一套属于自己的版本控制系统才不至于重蹈覆辙。他们对新的系统订了若干目标:

  • 速度
  • 简单的设计
  • 对非线性开发模式的强力支持(允许上千个并行开发的分支)
  • 完全分布式
  • 有能力高效管理类似 Linux 内核一样的超大规模项目(速度和数据量)

2. Git的简介

  • Git是目前市场上最牛的版本控制软件。(没有之一)
  • Git是一个开源免费的分布式版本控制系统。旨在快速高效地处理从小型项目到大型项目的所有内容。
  • Git 不仅仅是版本控制系统,同时它也是内容管理系统(CMS),工作管理系统等。
  • Git起初是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。所以Git和Linux命令完全兼容。
  • Git是分布式的。可以通过Git从服务器上把完整的Git仓库克隆到本地。所以Git的很多操作都是本地的。

3.Git的优点

3.1 协同修改

​ 多人并行不悖的修改服务器端的同一个文件。

3.2 数据备份

​ 不仅保存目录和文件的当前状态,还能够保存每一个提交过的历史状态。

3.3 版本管理

​ 在保存每一个版本的文件信息的时候要做到不保存重复数据,以节约存储空间,提高运行效率。这方面 SVN 采用的是增量式管理的方式,而 Git 采取了文件系统快照的方式。

3.4 权限控制

​ 对团队中参与开发的人员进行权限控制。

​ 对团队外开发者贡献的代码进行审核——Git 独有。

3.5 历史记录

​ 查看修改人、修改时间、修改内容、日志信息。

​ 将本地文件恢复到某一个历史状态。

​ 分支管理。

​ 许开发团队在工作过程中多条生产线同时推进任务,进一步提高效率。

4. Git官网

​ 官网地址: https://git-scm.com/

5. Git工作流程

​ 代码工作区—>执行git add —>暂存区(临时存储)—>执行git commit—>本地库(历史版本)

​ 工作区、暂存区和本地仓库,逻辑上是本地计算机。当我们新建一个文件时,文件位于工作区,处于已修改(modified)状态,表明文件已进行了修改,但还没有提交保存;

​ 通过命令 git add 将其添加到暂存区,文件是已暂存(staged)状态,表示把已修改的文件放到下次提交时要保存的清单中。

​ 通过命令 git commit将文件放入本地仓库,文件为已提交(commited)状态,表示该文件已经被安全地保存在本地数据库中,到这一步可以说是成功生成了一个新的版本。远程仓库用来将本地仓库上传到网络,实现备份、共享和合作

三、 Git的安装

1. 安装步骤

​ 全程闭着眼睛安装就可以了

​ 安装完成后打开Git Bash窗口

​ 输入git --version 输出版本信息证明安装成功

四、 Git 中常用命令

1. 创建版本库

​ 什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。由于git是分布式版本管理工具,所以git在不需要联网的情况下也具有完整的版本管理能力。

​ 创建一个版本库非常简单,可以使用git bash也可以使用tortoiseGit。首先,选择一个合适的地方,创建一个空目录(D:tempgitrepository)

1.1第一步

1.2 输入init指令

1.3查看结果


​ 版本库:“.git”目录就是版本库,将来文件都需要保存到版本库中。

​ 工作目录:包含“.git”目录的目录,也就是.git目录的上一级目录就是工作目录。只有工作目录中的文件才能保存到版本库中。

2. 添加文件

​ 将文件添加到暂存区

git add 文件名

3. 提交文件

​ 将文件提交到本地仓库

git commit -m "提交注释"

4.查看状态

​ 查看目录中是否还有文件未提交

git status

5. 查看文件修改对比差异

​ 比较文件差异

git diff

​ 将工作区中的文件和暂存区进行比较

git diff [文件名]

6. 查看日志

​ 查看历史记录,显示从最近到最远的日志

git log

7. 简化显示

git log --pretty=oneline

8. 查看简短日志

​ 查看历史记录,并以简短信息显示

git reflog


​ HEAD@{移动到当前版本需要多少步}

9. 前进回退

​ 前进后退版本

git reset --hard [局部版本号]

10. 删除文件

​ 对于删除文件也可使用reset命令恢复

git rm [文件名]


​ 如果删除文件后未提交可以使用checkout恢复

git checkout -- [文件名]

五、常见的远程仓库

1. Github

​ Github是目前全球最大的代码托管平台。也是Git官方指定的远程仓库。里面包含了全球很多开源项目。

​ 但是由于Github是国外的服务器,所以在国内(尤其网络不是很好的地方)在进行推送内容或拉取内容时的速度可能不是特别快。

2. Gitee

​ Gitee 中文名称码云。

​ 是国内目前最大的代码托管平台。号称中国版Github。是由开源中国推出的。

​ 近几年在选择远程仓库时Gitee常作为国内开发者首选。

六、远程仓库操作(以码云为例)

1. 在码云注册账号

​ 官网地址: https://gitee.com/

2. 创建远程仓库

2.1首先需要注册一直自己的账号。注册完成后进行登录。

2.2 登录成功后出现进入个人中心首页。点击右上角“+”-> 新建仓库 创建一个新的仓库

2.3 填写仓库信息。

​ 注意:

  1. 仓库名称是必填项。

  2. 是否开源选择开源

  3. 取消勾选“使用Readme文件初始化这个仓库”

3 推送到远程

3.1Git 全局设置

​ git 想要把自己的内容提交到远程仓库,需要进行全局设置远程账号的用户名和邮箱。

​ 设置自己的用户名,注意:修改成自己的用户名

git config --global user.name "bjsxt"

​ 设置自己的邮箱,注意:修改成自己的电子邮箱

git config --global user.email "bjsxt@bjsxt.com"

​ 设置成功后会在C:\Users\用户名(此目录是Windows系统账号名)中出现.gitconfig文件。此文件中存储了上面命令设置的账号及邮箱。

3.2 通过git init命令完成初始化

3.3 通过git commit -m “自定义注释” 可以把缓存区内容提交到本地库。

3.4 通过git remote add origin 仓库地址 设置远程仓库地址。

3.5 通过 git push -u origin master 把本地仓库内容提交到远程仓库。

​ 输入完成命令后,在第一次提交会弹出输入用户名和密码的提示框。

3.6 当输入完成用户名和密码后会自动进行提交

3.7 在浏览器中刷新仓库页面,会发现文件已经上传到远程仓库

4. 把远程仓库克隆到本地的流程

4.1 复制远程仓库地址

​ 在Gitee仓库中直接复制仓库地址。

4.2 克隆

​ 在希望克隆远程仓库的目录中执行git clone 远程仓库地址 命令。

​ 克隆完成后会在目录中出现一个和远程仓库同名的文件夹。

七、分支操作

1. 分支概念

​ 分支不是GIT的专利,早在CVS时代就有了。分支对于团队来说作用太大了。比如说一个项目现在是1.0版,那么开发团队可能要同时进行1.1版和2.0版的开发,这样代码就会出现较大分歧。这时候就需要用到分支了,不同的任务组在不同的分支上开发,互相之间不会影响。再比如说,需要向项目中添加一个新功能,一般的团队都不会直接在主分支上修改,都会新建一个分支,在上面更改代码。这样做的好处就是保证主线代码的完整性和可用性,也就是说,主线上都是稳定的代码,可以直接拿来发布的。

​ 在版本控制过程中,使用多条线同时推进多个任务。每条线成为一个分支。

1.1 Master

​ 主分支;主要是稳定的版本分支,正式发布的版本都从Master拉。

1.2 Develop

​ 开发分支;更新和变动最频繁的分支,正常情况下开发都是在Develop分支上进行的。

1.3 Release

​ 预发行分支;一般来说,代表一个版本的功能全部开发完成后递交测试,测试出Bug后进行修复的分支。

1.4 Features

​ 功能分支; 其实Features不是一个分支,而是一个分支文件夹。里面包含了每个程序员开发的功能点。Feature开发完成后合入Develop分支。

1.5 HotFix

​ 最希望不会被创建的分支;这个分支的存在是在已经正式上线的版本中,发现了重大Bug进行修复的分支。

2.分支使用

2.1 创建分支

​ 通过 git checkout -b 分支名 master 创建一个分支。

​ 注意:此时创建的分支只是在本地仓库创建分支,远程仓库并没有创建。

2.2 查看分支

​ 通过 git branch 查看本地所有分支。哪个分支是绿色且前面带有*号,是当前所在分支。

2.3 推送本地分支到远程

​ 通过 git push origin 本地分支名:远程分支名 推送到远程仓库。

2.4 让本地分支和远程分支创建联系

​ 通过git branch --set-upstream-to=origin/分支名 让本地分支和远程分支产生联系。

2.5分支切换

​ 通过git checkout 分支名 可以实现各个分支之间的切换。

2.6 合并分支

​ 通过git merge --no-ff 分支名 把分支合并到当前分支。

​ 如果希望把develop合并到master分支中,需要先切换到master,然后执行合并命令。

2.7 删除本地分支

​ 通过 git branch -d 分支名 删除本地分支。

​ 需要注意:如果当前所在这个分支,是不能删除这个分支的。

​ 可以通过切换到master,然后删除develop

2.8 删除远程分支

​ 通过 git push origin --delete 分支名 删除远程仓库中分支。

八、IDEA中操作Git

1. 使用IDEA提交代码

1.1 在idea中配置git路径

1.2 在远程仓库上创建仓库

​ 创建本地仓库

1.3 将项目添加到缓存

1.4 提交项目

1.5 提交并上传

1.6 添加远程仓库地址

1.7 查看上传状态

1.8 可能出现问题分析

​ 如果上传时出现Push rejected: Push to origin/master was rejected 。代表本地仓库内容和远程仓库内容不一致。

​ 解决办法:

  1. 选择你要上传代码的文件夹,鼠标右键git Bash Here

  2. 输入下面两行命令

    git pull origin master --allow-unrelated-histories       --把远程仓库中的内容 pull 到本地工作目录git push -u origin master -f                             --在 pull 下来的项目中做修改,通过以上命令 push 到远程仓库了
    

2. 在idea中用git获取新项目代码

2.1 第一步

2.2 第二步 :克隆远程仓库

3. 解决冲突

3.1 产生冲突的原因

​ 冲突产生的根本原因是:两个人修改了同一个文件的同一块区域,在前者已经提交代码到远程仓库的情况下,后者修改代码前没有使用pull命令更新代码,而是修改完代码后再使用pull命令,这时就会产生冲突。这也是最常见的冲突,下面介绍解决冲突的办法也主要针对这种冲突。

3.2 预防冲突

​ 在修改代码前,使用pull命令更新代码,能够保证在开始修改代码前本地的代码与远程仓库中的版本一致,这样能够大大降低冲突发生的概率。

3.3 解决冲突

​ 按照图片中的步骤,顺序不能乱,先stash,然后pull,最后unstash

  • 第一步:暂存代码,idea会恢复到上次更新后的代码,将修改的代码隔离出去

  • 第二步:将远程仓库的代码拉下来

  • 第三步:将暂存的代码还原回来



    ​ 从左至右 【本地代码更新后的代码】【合并后的代码】 【暂存文件的代码】

4. idea结合分支的使用

4.1 查看/切换分支


4.2 新建一个分支


4.3 合并/删除分支实现

Git:版本控制控制软件相关推荐

  1. 版本控制工具简介(一)——git版本控制

    1.git版本控制 1.1版本控制 版本控制的英文名称为(Version Control System),主要有以下几个作用. 记录文件的所有历史变化 错误恢复到某个历史版本 多人协作开发编辑同一个文 ...

  2. Git 版本控制之 GitFlow

    来源:  http://t.cn/EbZKx96 最近在着手制定开发规范,想要把项目正规高效的跑起来.计划引入 Git 版本控制,Git-Flow 便成为了首选.因为之前并没有过多接触,所以先花些时间 ...

  3. git版本控制工具(二)----本地版本库的常用操作

    ​[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...

  4. 非程序员如何使用 Git——版本控制你的生活

    在协同工作和版本控制方面,Git 绝对是一个优秀的工具,但其优点并不被大众所熟知.在过去的几年中,由于大众对于文字处理,电子表格(译者注:这里暗指Word和Excel,下同.)以及其他常用的功能的需求 ...

  5. git修改服务器的命令行,Git版本控制工具安装及命令行操作

    很多小伙伴不知道如何来安装Git版本控制工具,对于命令操作比较陌生.本文做了一个详细的文档,希望对大家有所帮助. 1.git 是什么一个分布式版本控制系统,和SVN类似,但远比SVN强大的一个版本控制 ...

  6. 《Git版本控制管理(第2版)》——4.3 Git在工作时的概念

    本节书摘来自异步社区<Git版本控制管理(第2版)>一书中的第4章,第4.3节,作者:[美]Jon Loeliger , Matthew McCullough著,更多章节内容可以访问云栖社 ...

  7. 在Android Studio 上为项目添加Git版本控制

    准备:Android Studio 需要配置GitHub ,配置方法在上一篇文章:https://blog.csdn.net/z1web/article/details/84106234 然后打开你想 ...

  8. git版本控制以及分支管理

    git版本控制以及分支管理--一起乘坐时光机 四.深度剖析 一.版本控制---时光机穿梭 1.熟悉版本 2.版本回退 3.管理修改 1.管理修改以及理解工作的原理 2.撤销修改的内容 3.删除文件 二 ...

  9. 【Git版本控制管理】Gitee(码云)和GitHub的使用

    远程仓库的使用 文章目录 远程仓库的使用 使用码云(Gitee) 使用GitHub 远程仓库是指托管在因特网或其他网络中的你的项目的版本库. 你可以有好几个远程仓库,通常有些仓库对你只读,有些则可以读 ...

  10. Git版本控制工具的使用一

    Git是一个开源的分布式版本控制工具,它的开发者就是Linux操作系统的作者Linus Tovarlds.Git被开发出来的初衷是为了更好的管理Linux内核,如今却被广泛地用于全球各大大中小型的项目 ...

最新文章

  1. R安装包源设置的常见方式及国内常用源
  2. jmeter察看结果树-响应数据乱码
  3. 注册机patch起什么作用_电机滑环起什么作用?
  4. 机器学习速成课程 | 练习 | Google Development——编程练习:(TensorFlow) Hello World
  5. C#中 ?? 的用法
  6. Windows查看开关机记录
  7. github whs_从iPhone或iPod Touch获得WHS的基本访问权限,而无需安装应用程序
  8. 机器人波波熊_【菠菠智能悦读机器人绘本更新篇】新技能get!BoBo本周新增绘本103本!...
  9. 求生之路2 服务器显示人满,求生之路2服务器怎么设置人数
  10. 职场成功学—项目管理之目标管理
  11. 达梦数据库连接报错 error code=-70028 Create SOCKET connection failure. 创建SOCKET连接失败
  12. linux备份文件到ftp上,Linux如何利用ssh传送文件至FTP空间进行备份
  13. 用scratch编程一个问答游戏
  14. LeakCanary原理解析
  15. ECDSA算法加解密验签
  16. 关于jquery.flexslider-min.js插件
  17. maven 配置 mvn -v
  18. Excel 数据导入SQL XML 自动生成表头
  19. 仿迅雷播放器教程 -- 权威界面库对比 (8)
  20. datagridview2.rows.add 添加到最后一行_台美樱花红发展公司一行来我市进行樱花观赏园项目考察...

热门文章

  1. idea全局搜索没有内容
  2. 问道服务器etc修改教程,常用的修改etc对照表-详细版
  3. centos7安装apache
  4. kali 安装 google 浏览器
  5. veu2 启动添加本地ip访问
  6. 基于iTextSharp库的PDF文件拆分、合并(C#)
  7. Docker数据管理:data container
  8. html中怎么设置背景图片固定,css如何实现固定的背景图像
  9. WPF开发之解决程序调用自定义dll库在部分win7电脑上无法运行的情况
  10. 根据市场需求和反馈调整产品定位,调整产品既定设计策略和营销策略