目录
学习Git之前,首先要对版本控制有个简单的了解
一、版本控制(了解)
(1)版本控制概述
版本控制是一种记录文件内容变化 ,以便将来查阅特定版本修订情况的系统。
可以记录文件修改历史记录 ,从而让用户能够查看历史版本,方便版本切换
(2)版本控制软件的作用
- 保存和管理文件
- 提供客户端工具进行访问
- 提供不同版本文件的比对功能
- 支持多人协作开发
(3)版本控制的应用场景
- 软件开发协作(核心 场景 )
支持多人并行开发 ,杜绝文件覆盖、修改冲突;通过分支隔离 新功能开发、bug修复,保护主项目稳定;可追溯修改记录 ,故障时快速回滚版本,规范项目迭代流程。
- 规范化版本迭代管理
统一管理迭代版本 ,区分测试版、正式版,规范版本命名与归档;摒弃杂乱自定义文件名,方便版本追溯、复盘与复用。
- 办公文档协同编辑
适用于标书、报告、制度、论文等各类文档,支持多人协同编辑 ;自动留存历史版本、对比版本差异 ,可一键恢复误改内容,保障文档安全可控。
- 设计媒体文件管理
管控UI设计、视频剪辑、建模工程等源文件与素材,记录改版细节 ;解决设计文件版本混乱、文件丢失问题,方便工作交接与方案复盘。
- 运维配置版本管控
统一管理各类运维配置 ,区分多环境配置;配置出错可快速回滚修复 ,实现运维配置标准化、可追溯、可复用。
- 远程/跨团队协作
支持异地团队共享项目文件、实时同步更新 ,无需反复传输文件,彻底解决异地协作版本不同步、重复修改的问题。
- 个人资料归档留存
用于个人笔记、毕业设计、私有项目等资料管理,自动留存修改记录 ,防止文件丢失,支持跨设备同步,方便资料沉淀与复用。
(4)集中式版本控制工具
CVS 、 SVN(Subversion) 、 VSS (微软)等等
集中化的版本控制系统诸如 CVS 、 SVN 等,都有一个单一的集中管理的服务器 ,保存所有文件的修订版本 ,而协同工作的人们都通过客户端连到这台服务器 ,取出最新的文件或者提交更新。多年以来,这已成为版本控制系统的标准做法。
- 优点:
- 每个人都可以在一定程度上看到项目中的其他人正在做些什么。
- 管理员可以轻松掌控每个开发者的权限,并且管理一个集中化的版本控制系统。
- 缺点:
- 在离线状态下开发者无法进行版本管理开发
- 每个开发者只有应用代码库的一个版本
- 中央服务器的单点故障。如果服务器宕机一小时,那么这一小时内,谁都无法提交
更新,也就无法协同工作。
(5)分布式版本控制工具
Git 、 Mercurial 、 Bazaar 、 Darcs等等
分布式的版本控制系统出现之后:
- 服务器断网的情况下也可以进行开发,等到有网时再 push 到仓库中
- 每个客户端保存的是整个代码库的所有版本
- 服务器可以是集群的,主从复制,一个宕机以后,客户端还可以连其他服务器
二、Git
(1)Git的简单介绍
Git就是一种分布式版本控制系统 ,且是免费的、开源的,它易于学习,占地面积小,性能极快。 它拥有有廉价的本地库,方便的暂存区域和多个工作流分支
(2)Git下载
官网地址: https://git-scm.com/
使用文档地址: https://git-scm.com/docs
(3)关于代码托管中心
- 互联网
- GitHub(地址:https://github.com/),是一个面向开源及私有软件项目的托管平台,因为只支持 Git 作为唯一的版本库格式 进行托管,故名 gitHub。因为是国外网站所以从国内访问很慢。
- Gitee / 码云(地址:https://gitee.com/),是国内的一个代码托管平台,由于服务器在国内,所以相比于 GitHub,码云速度会更快。
- 局域网
GitLab(地址: https://about.gitlab.com/ )是一个用于仓库管理系统的开源项目,使用 Git 作为代码管理工具,并在此基础上搭建起来的 web 服务。与 GitHub 的使用类似,有特殊需求不能使用外网的代码托管中心,可以在局域网内搭建自己的代码托管中心服务器。
三、Git命令以及简单实操
(1)Git的基本命令
命令名称 作用 git config --global user.name 用户名设置用户签名 git config --global user.email 邮箱设置用户邮箱 git init初始化本地库 git status查看本地库状态 git add 文件名添加到暂存区 git commit -m "提交日志说明" 文件名提交到本地库 git reflog查看历史记录 git reset --hard 版本号版本穿梭
(2)Git的简单实操
首先进行简单的全局用户签名,Git 首次安装 必须设置一下用户签名,否则无法提交代码。
bashgit config --global user.name 用户名 git config --global user.email 邮箱
Git命令流程演示
- 先进入我们需要实操的目录:
需要注意的是,Git与Linux系统相同,将\符号作为一个转义字符,所以一般路径都用/或者\\
- 初始化本地仓库:
bashgit init
- 查看本地仓库状态:
bashgit status
On branch master :在 master 默认主干分支
No commits yet :还没有任何本地提交
- vim进行配置文件
再次查看状态,发现文件没有纳入本地库,无法被git管理
- 添加至暂存区
bash# 添加所有文件 git add . # 添加指定文件 git add 文件名
- 提交本地仓库
bash# -m 后面接的是版本描述信息 git commit -m "日志信息" 文件名再次查看一下状态
发现没有问题了
三种状态:红:在工作区,未添加到暂存区
绿:已添加到暂存区,未添加到本地库
空:所有文件已经都添加到本地库
Git目录
.git为隐藏文件夹 ,是本地的版本库
.git文件夹下的index文件 ,就是暂存区
.git文件夹下的demo文件 ,就是工作区
Git命令流程演示(2)
- 修改hello.txt文件
发现又不在暂存区了,所以再次添加
- 工作区文件和暂存区比较
bashgit diff 文件名
- 本地库和暂存区版本比较
bashgit diff --cached 文件名
- 查看历史版本
bash# 查看版本信息 git reflog git reflog -n 数量 # 查看版本详细信息 git log
- 版本穿梭(回退版本)
bashgit reset --hard 版本号可以看到之前的版本号进行了变更
那我们退回之前的版本
可以看到回退成功了,同时hello,txt文件的内容也修改成功
说明: Git 切换版本,底层其实是移动的 HEAD 指针。
- 删除文件
bash# 删除文件 rm 文件名 #删除一个已经在本地版本库中的文件:删除后需要提交 git rm 文件名 git commit -m '删除描述'这里我们再新创建一个新的文件,过程之前已经演示过了这里直接跳过,进行删除演示
(3)Git的分支操作
使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线。
master作为默认分支,不去改动;在版本控制过程中,同时推进多个任务,为每个任务创建一个单独分支。每个程序员在自己的分支里写代码,开发完成后提交。
分支的好处
- 同时并行推进多个功能开发,提高开发效率。
- 各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。 失败的分支删除重新开始即可。
分支的操作
命令名称 作用 git branch -v查看分支 git branch 分支名创建分支 git checkout 分支名切换分支 git merge 分支名把指定的分支合并到当前分支上
分支的命令使用
- 先创建一个分支
bash# 查看分支 git branch -v # 创建分支 git branch 分支名分支后续的修改跟之前的一样的,但是分支修改之后id的版本发生了改变
- 切换分支
bashgit checkout 分支名
- 合并分支
bashgit merge 分支名如果 master 或 system 分支只有一个分支修改过,则合并不会出现冲突;如果两个分支
都各自修改过同一份文件,则合并会出现冲突。
冲突
我这里没有进行修改所以不会有冲突
这是有冲突的情况
- 冲突产生的原因:
合并分支时,两个分支在 同一个文件的同一个位置 有两套完全不同的修改。 Git 无法替
我们决定使用哪一个。必须 手工解决 新代码内容。
- 解决冲突方法:
编辑有冲突的文件;添加到暂存区;执行提交
- 如何避免冲突
- 各人维护各人的代码分支,要避免多个人在各自分支上修改同一个文件。
- 避免在 master 分支上写代码。
在一个项目中,配置类和工具类是可能被多人多个子模块共享的,都修改的话,怎么避
免冲突?
- 回答:尽量由一个人进行统一的维护。修改好后,其他人来更新即可。
















这是有冲突的情况