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------>配置公钥
相关推荐
攻心的子乐5 分钟前
Kafka可视化工具 Offset Explorer (以前叫Kafka Tool)
分布式·kafka
小林想被监督学习40 分钟前
RabbitMQ 的7种工作模式
分布式·rabbitmq
初晴~2 小时前
【Redis分布式锁】高并发场景下秒杀业务的实现思路(集群模式)
java·数据库·redis·分布式·后端·spring·
有一个好名字2 小时前
zookeeper分布式锁模拟12306买票
分布式·zookeeper·云原生
yukai080086 小时前
【最后203篇系列】002 - 两个小坑(容器时间错误和kafka模块报错
分布式·kafka
老猿讲编程7 小时前
OMG DDS 规范漫谈:分布式数据交互的演进之路
分布式·dds
C++忠实粉丝7 小时前
服务端高并发分布式结构演进之路
分布式
洛神灬殇8 小时前
彻底认识和理解探索分布式网络编程中的SSL安全通信机制
网络·分布式·ssl
龙哥·三年风水9 小时前
workman服务端开发模式-应用开发-vue-element-admin封装websocket
分布式·websocket·vue
落落鱼20139 小时前
cenos如何升级git到2以上版本
git