Git:分布式版本控制系统

目录

  • 一、从了解Git开始
    • [1. 认识Git](#1. 认识Git)
    • [2. Git下载](#2. Git下载)
    • [3. 配置用户信息](#3. 配置用户信息)
    • [4. 本地仓库](#4. 本地仓库)
    • [5. 远程仓库](#5. 远程仓库)
  • 二、本地仓库精讲
    • [1. 工作流](#1. 工作流)
    • [2. 命令](#2. 命令)
  • 三、远程仓库精讲
    • [1. 基础概念讲解](#1. 基础概念讲解)
    • [2. 命令](#2. 命令)
    • [3. 生产环境工作流](#3. 生产环境工作流)

一、从了解Git开始

1. 认识Git

Git是一个分布式版本控制系统。它使每一个开发者本地都有一个独立的版本库,可以在本地管理代码版本;还可以记录文件内容的变化,以便查阅和修改文件版本。

2. Git下载

Git官网下载安装包,然后再本地安装。

3. 配置用户信息

安装结束后,第一件事就是配置用户信息,因为每一次提交都要用到用户信息。

复制代码
git config --global user.name xxx
git config --global user.email xxx.com

4. 本地仓库

分为三个区域:

1.工作区:在这个区域对项目代码进行开发和修改。

2.暂存区:对工作区的文件跟踪后,就把修改加入了暂存区。

3.本地代码库:对暂存区的文件进行提交之后,就来到了本地仓库,作为一个被提交的代码版本被保存起来。

5. 远程仓库

在本地仓库的基础上引入两个概念

1.分支:

是一个指向commit对象的指针,常见的有master。head指针永远指向当前工作的本地分支。关于分支的操作有创建分支、切换分支、删除分支、合并分支。特别地,合并分支时,应该先解决冲突再合并。

  1. 远程分支:

也是一个指针,指向与远程仓库交互的commit对象,只有本地与远程仓库交互之后才会移动。也就是只记录最后一次与远程仓库交互过的版本。

远程分支告诉开发者从远程仓库clone代码时的代码库的情况。

在本地无法改变远程分支的位置,只有在与远程代码库服务器通信时才能改变。

可以通过git fetch获取远程代码库,来改变本地代码库的远程分支的位置。之后可以通过git merge origin/master将远程分支的变更合并到本地分支。

  1. 标签 :

标注代码仓库中的某一个版本及其相应的信息,跟代码版本commit对象绑定,不会移动。

二、本地仓库精讲

1. 工作流

第一步:(初始化本地仓库、为本地添加远程仓库)/从远程仓库克隆代码

第二步:在工作区对项目代码进行开发修改,并将做出的更改加入暂存区

第三步:把暂存区的代码提交到本地仓库

2. 命令

复制代码
1. git status # 查看当前工作区文件相对于暂存区和版本库的状态 例如:未跟踪、有更改待提交
2. git add filename # 将filename(更改后的文件)添加为跟踪状态,其实就是从工作区加到暂存区
3. git commit -m 'change_info' # 将暂存区的文件提交到版本库, -m允许添加更改信息 '这里是更改信息'
4. git log [--oneline] # 查看提交记录,可选项可以将每个提交记录各集中在一行
5. [git] rm file # 本地删除文件; 可选项会同时删除本地和缓存区的文件,最后去提交
6. git restore file # 从暂存区复制文件状态到工作区(撤销本地修改),前提是暂存区必须有前一个文件状态; git checkout -- file命令效果相同
7. git restore --staged file # 回撤暂存区到上一个状态;作用相同的指令: git reset [--] file
8. git commit -a -m 'info' # 把已被跟踪的工作区的更改同时加入暂存区和本地仓库
9. git checkout HEAD -- file # 获取本地仓库中最后一次提交的代码,用来覆盖工作区和暂存区
10. git reset  [回退版本] # 从代码仓库获取指定版本覆盖暂存区,同时删除该版本之后提交的所有版本。     回退版本有三种表示方法
11. git reset --hard [回退版本] # 从代码仓库取得某个版本,同时覆盖暂存区和工作区
12. git revert [-n] head #撤销最新的提交(工作区和暂存区的最新修改也被撤销),但不删除提交记录,并生成一个新的提交记录。     -n:撤销,但不提交新生成的修改记录,需要手动提交。
13. `.gitignore`文件的配置,用来忽略不用被跟踪的文件
14. git diff [--staged]|[--cached] # 比较工作区和暂存区之间的差异;可选项比较暂存区和代码仓库之间的差异;git diff [版本1]  [版本2] 比较两个版本之间的差异;git diff head 比较代码库和工作区之间的差异

三、远程仓库精讲

1. 基础概念讲解

远程仓库就是在远程服务器上的代码仓库,较为常用的是gitee、GitHub。

在之前三个区域的基础上,重点介绍分支:

  1. 生产分支/master分支:用来上线;
  2. 开发分支/develop分支:master分支的平行分支,用来开发新功能;开发出新功能、测试、稳定、合并到master分支、上线
  3. 功能分支:从develop分支创建的分支,开发出功能后再合并到develop的分支。
  4. 解决上线分支的问题:返回到master分支、创建fix分支、修复问题、测试、合并到master分支、上线

2. 命令

git 复制代码
1.git branch <分支名> : 创建新分支
2.git branch:查看本地所有分支
3.git branch -v:查看各个分支的最后一次提交信息
4.git check <分支名>:切换到目标分支,本地工作区的内容也会更改  
5.git check -b <分支名>:新建且切换到新分支
6.git branch -d <分支名>:删除分支
7.git merge <branch1>:把branch1合并到当前分支,可以再合并成功后删除被合并的分支
  1. 储藏
    如果要换到别的分支工作,但是不想提交再当前分支的更改,那么就可以将更改储藏起来,下次切换回这个分支,可以取出储藏继续工作。
git 复制代码
git stash 储藏
git stash apply 获取储藏

如果什么都不做(提交、储藏)就切换到别的分支,则在这个分支做的更改会丢失。

  1. 远程分支
    可以通过本地分支master创建新分支、也可以通过远程分支origin/master创建新分支
    可以通过git fetch来获取远程仓库的分支
    通过远程分支创建本地分支:git checkout -b 新本地分支 远程分支,这个命令创建的分支会自动跟踪远程分支
    创建远程仓库的分支
    在本地创建新分支:git branch 新分支,在推送到远程仓库git push 远程仓库名 本地分支名:远程分支名
    在远程仓库直接新建新分支
    删除远程仓库的分支
    某个分支不用了,直接删除这个分支,避免分支管理压力过大
    在托管平台直接删除
    在本地通过命令删除:git push 远程仓库名 --delete 分支名,这可以删除本地的远程分支和远程服务器上对应的分支
  2. 标签
git 复制代码
1.新建标签:git tag -a 标签名 -m '标签说明信息'  -a会创建一个带注解的标签、-m指定对应的标签说明
2.查看标签信息和其指定的对象的信息:git show 标签名
3.追加标签:git tag -a 标签名 之前的提交版本 -m '标签说明信息'
4.列出所有标签:git tag
5.删除标签:git tag -d 标签名
6.推送标签到远程仓库:git push 远程仓库名 标签名
7.通过标签获得对应版本:git checkout -b 本地分支名 标签名

3. 生产环境工作流

  1. 创建远程仓库
  2. 初始化本地仓库:git init
  3. 为本地添加远程仓库:git remote add <shortname> <url>
  4. 查看本地现有的远程仓库:git remote
  5. 删除远程仓库:git remote rm 仓库名
  6. 获取远程仓库代码:git pull 远程仓库名 远程仓库分支
  7. 推送本地仓库代码到远程仓库:git push 远程主机名 本地分支名 远程分支名;本地分支名和远程分支名相同时:git push 远程主机名 本地分支名
  8. 从远程仓库克隆代码:git clone 远程仓库地址
  9. 代码拉取精讲:git pull;需要config文件中配置才能使用,否则,使用 git branch --set-upstream-to=[origin/master]进行配置
  10. 从远程仓库拉去代码,但不自动合并:git fetch拉取,需要手动合并git merge origin/master
  11. 合并冲突:两个人改动同一块代码时,推送时会出现冲突。解决:推送前拉取代码------>本地解决冲突------>推送
  12. ssh协议:本机生成私钥公钥ssh-keygen -t rsa------>配置公钥
相关推荐
数据智能老司机30 分钟前
CockroachDB权威指南——CockroachDB SQL
数据库·分布式·架构
数据智能老司机1 小时前
CockroachDB权威指南——开始使用
数据库·分布式·架构
数据智能老司机2 小时前
CockroachDB权威指南——CockroachDB 架构
数据库·分布式·架构
IT成长日记2 小时前
【Kafka基础】Kafka工作原理解析
分布式·kafka
州周4 小时前
kafka副本同步时HW和LEO
分布式·kafka
carterwu5 小时前
git工作流程的分类和对应场景
git
爱的叹息5 小时前
主流数据库的存储引擎/存储机制的详细对比分析,涵盖关系型数据库、NoSQL数据库和分布式数据库
数据库·分布式·nosql
2401_840192275 小时前
如何学习一门计算机技术
开发语言·git·python·devops
千层冷面6 小时前
RabbitMQ 发送者确认机制详解
分布式·rabbitmq·ruby
ChinaRainbowSea6 小时前
3. RabbitMQ 的(Hello World) 和 RabbitMQ 的(Work Queues)工作队列
java·分布式·后端·rabbitmq·ruby·java-rabbitmq