
◆博主名称:少司府
欢迎来到少司府的博客☆*: .。. o(≧▽≦)o .。.:*☆
⭐数据结构系列个人专栏:
⭐C++基础个人专栏:
⭐琢玉成器终有时,笔底生花夺锦归
目录
[1.1 Git 是什么?](#1.1 Git 是什么?)
[1.2 版本控制方式](#1.2 版本控制方式)
[1.3 Git 工作的流程图](#1.3 Git 工作的流程图)
[二、Git 常见命令](#二、Git 常见命令)
[2.1 基本配置](#2.1 基本配置)
[2.2.1 设置用户信息](#2.2.1 设置用户信息)
[2.2.2 为常用指令配置别名](#2.2.2 为常用指令配置别名)
[2.2 创建文件](#2.2 创建文件)
[2.3 查看提交日志](#2.3 查看提交日志)
[2.3.1 提交日志](#2.3.1 提交日志)
[2.3.2 版本回退](#2.3.2 版本回退)
[2.3.3 添加文件至忽略列表](#2.3.3 添加文件至忽略列表)
[2.4 分支](#2.4 分支)
[2.4.1 查看本地分支](#2.4.1 查看本地分支)
[2.4.2 创建本地分支](#2.4.2 创建本地分支)
[2.4.3 切换分支](#2.4.3 切换分支)
[2.4.4 合并分支](#2.4.4 合并分支)
[2.4.5 删除分支](#2.4.5 删除分支)
[2.4.6 解决冲突](#2.4.6 解决冲突)
[2.4.7 开发中分支使用原则与流程](#2.4.7 开发中分支使用原则与流程)
[3.1 常用的托管服务(远程仓库)](#3.1 常用的托管服务(远程仓库))
[3.2 配置SSH公钥](#3.2 配置SSH公钥)
[3.3 操作远程仓库](#3.3 操作远程仓库)
[3.3.1 添加远程仓库](#3.3.1 添加远程仓库)
[3.3.2 查看远程仓库](#3.3.2 查看远程仓库)
[3.3.3 推送到远程仓库](#3.3.3 推送到远程仓库)
[3.3.4 查看当前分支与远端分支的关联关系](#3.3.4 查看当前分支与远端分支的关联关系)
[3.3.5 从远程仓库克隆](#3.3.5 从远程仓库克隆)
[3.3.6 从远程仓库抓取和拉取](#3.3.6 从远程仓库抓取和拉取)
[3.3.7 解决合并冲突](#3.3.7 解决合并冲突)
一、概述
1.1 Git 是什么?
Git 是一个分布式版本控制系统,其主要作用是:记录每次的文件的修改以及版本迭代的一个管理系统。可以控制电脑上所有格式的文档。
1.2 版本控制方式
文件的版本控制主要有两种方式:
1)、集中式版本控制工具,例如SVN、CVS
2)、分布式版本控制工具,例如Git

如图,集中式版本控制工具的版本库是存放在中央服务器的,team中每个人work时从中央服务器下载代码,是必须联网才能工作。个人修改之后提交到中央版本库。

如图,分布式版本控制系统没有"中央服务器",每个人的电脑上都是一个完整的版本库,工作时无需联网,多人协作时将自己的修改推给对方,这样就能互相看到修改了。
1.3 Git 工作的流程图

其主要命令如下:
1)、clone(克隆):从远程仓库中克隆代码到本地仓库
2)、checkout(检出):从本地仓库中检出一个仓库分支然后修订
3)、add(添加):将代码提交到暂存区
4)、commit(提交):提交到本地仓库,本地仓库中保存修改的各个历史版本
5)、fetch(抓取):从远程库,抓取到本地仓库,不进行任何合并动作,一般操作比较少
6)、pull(拉取):从远程库拉到本地库,自动进行合并(merge),任何放到工作区,相当于fetch+merge
7)、push(推送):修改完成后,将代码推送到远程仓库
二、Git 常见命令
在学习Git 之前,我们需要了解一些基本的linux 命令,如:
1)、ls/ll 查看当前目录
2)、cat 查看文件内容
3)、touch 创建文件
4)、vi vi编辑器
2.1 基本配置
安装Git 之后,我们首先要做的就是设置用户名和email,每次Git 提交都会使用该用户信息,当出现代码问题时方便追责。
2.2.1 设置用户信息
1)、打开Git Bash
2)、设置用户名和邮件
git config --global user.name "xxx"
git config --global user.email " xxx@xx.com " // 可以不是真实姓名和邮件
查看配置信息:
git config --global user.name
git config --global user.email
2.2.2 为常用指令配置别名
1、打开用户目录,创建.bashrc文件

2、在该文件中输入下面内容:
bash
#用于输出git提交日志
alias git-log='git log --pretty=oneline --all --graph --abbrev-commit'
#用于输出当前目录所有文件及基本信息
alias ll='ls -al'
3、打开Git Bash,执行下面指令:

2.2 创建文件
我们先在桌面建立一个 git-test01 文件夹,点击进去,右键鼠标:

点击显示更多选项,打开Git Bash。
Git GUI:Git 提供的图形界面工具
Git Bash:Git 提供的命令行工具
我们创建一个文件,输入下面的代码
cpp
git init // 初始化本地仓库
touch file01.txt // 创建file01.txt文件

如图,由于我之前以及创建了01文件,这里我创建02文件。
创建好了之后,我们需要了解以下指令来操作文件:
1)、git status 查看当前文件所在区域/提交状态
2)、git add . 提交所有文件到暂存区
3)、git commit -m "add file01" 提交到本地仓库并记录本次提交,引号里面是注释内容
4)、git log 查看Git 仓库的提交历史记录
5)、vi file01.txt 用vi编辑器编辑file01.txt文件
2.3 查看提交日志
2.3.1 提交日志

如图,直接输入git log 会显示提交所有信息,我们还可以调整显示:
命令形式:gil log [option]
options:
1)、--all 显示所有分支
2)、--prety=oneline 将提交信息显示为一行
3)、--abbrev-commit 使输出的commitld更简洁
4)、--graph 以图的形式显示
上图中commit后面的黄字就是每次提交的唯一标识,一般使用前几位就可以了。

我们这里用到了上面设置的别名,直接使用上面4种功能显示。
2.3.2 版本回退
命令形式:git reset --hard commitID
commitID 就是每次提交的唯一标识,可以用git-log 查看。

如图,我将file01文件回退到了第一个版本,如果想要回到第二个版本,也可以再次输入:
git reset --hard a106ec5
如果我们git-log 查看不到了每次修改的版本,可以使用git reflog,查看删除的提交记录

2.3.3 添加文件至忽略列表
当该目录下有文件不希望用git管理时:
touch .gitingore 创建一个.gitingore文件,我们打开这个文件,把不希望用Git管理的文件名写入该文件中。
2.4 分支
分支是代码的独立副本,每个人在自己的分支上开发,互不影响,不影响主分支,可以把工作从主线开发上分离开来进行Bug的修复、开发新功能。上图中的master(新版本叫main)就是主分支。
2.4.1 查看本地分支
bash
git branch
2.4.2 创建本地分支
bash
git branch 分支名

如图,创建dev01之后就有两个分支。
我们工作、修改文件只能在一个分支上进行,称为当前分支。当我提交file02之后:

如图,提交操作只作用于master分支。
2.4.3 切换分支
bash
git checkout 分支名

如图,HEAD指向谁,谁就是当前分支。
bash
git checkout -b 分支名
创建分支并切换。
2.4.4 合并分支
bash
git merge 分支名称
将写入的分支合并到当前分支中。
2.4.5 删除分支
不能删除当前分支,只能删除其他分支
git branch -d b1 删除分支时,需要做各种检查,删除b1分支
git branch -D b1 不做任何检查,强制删除,删除b2分支

如图,当需要删除的分支没有合并到当前分支时,就需要用强制删除
2.4.6 解决冲突
在合并分支时,若两个人对同一文件同一行代码都进行了修改,git对于这种情况的合并是不清楚的,程序员解决这个问题的过程就叫解决冲突。

如图,自动合并失败,有冲突。

打开文件查看,发现git把file01文件中有冲突的这一行的当前分支和dev分支的内容都保留了下来

如图,自己修改文件之后add、commit之后git会给出提示,显示冲突信息。
2.4.7 开发中分支使用原则与流程
在开发中,一般有如下分支使用原则与流程:
1)、master(生产)分支
线上分支,主分支,中小规模项目作为线上运行的应用对应的分支
2)、develop(开发)分支
是从master创建的分支,一般作为开发部门的主要开发分支。阶段开发完成之后,需要合并到master分支上,准备上线。
3)、feature分支
从develop创建的分支,完成特定的功能的开发,一般是同期并行开发,但不同期上线时创建的分支,分支上研发任务完成之后合并到develop分支。
4)、hotfix分支
从master派生的分支,一般作为线上bug修复使用,修复完成之后需要合并到master、develop、test分支。
三、Git远程仓库
3.1 常用的托管服务(远程仓库)
远程仓库和本地仓库一样是一个版本库,常用的比较有GitHub、码云(gitee)、GitLab。
3.2 配置SSH公钥
生成公钥:
1)、在Git Bash中输入:ssh-keygen -t rsa rsa是一种算法
2)、不断回车,如果公钥已经存在,则自动覆盖原来的公钥
Gitee设置账户公钥:
1)、在Git上获取公钥:cat ~/.ssh/id_rsa.pub pub是public公共的意思

2)、验证是否配置成功:ssh -T git@gitee.com
3.3 操作远程仓库
3.3.1 添加远程仓库
git remote add origin 远程仓库地址 #添加一个远程仓库,名字叫origin
3.3.2 查看远程仓库
bash
git remote
3.3.3 推送到远程仓库
bash
git push [-f] [--set-upstream] [远端名称[本地分支名]:[远端分支名]]
例如:git push origin master:master
如果远端分支名和本地分支名相同,可以只写本地分支:git push origin master
-f 的意思是:本地分支强制覆盖云端分支
--set-upstream 的意思是:推送到远端的同时并且建立起和远端分支的关联关系
如果当前分支已经和远端分支关联,则可以省略分支名和远端名:git push
3.3.4 查看当前分支与远端分支的关联关系
bash
git branch -vv

如图,现在并没有和远端分支关联。


如图,现在和远端的origin仓库的master分支建立了联系。
注意:需要配置SSH公钥
3.3.5 从远程仓库克隆
如果已经有了一个远端仓库,我们可以直接clone到本地。
bash
git clone <仓库路径> [本地目录]
这里的本地目录可以省略,会自动生成一个目录
3.3.6 从远程仓库抓取和拉取
抓取:将仓库里的更新都抓取到本地,不会进行合并
bash
git fetch [remote name][branch name]
remote name就是远程仓库小名,如果不指定远端名称和分支名,则抓取所有分支
拉取:将远端仓库的修改拉到本地并自动进行合并 ,相当于fetch+merge
bash
git pull [remote name][branch name]
如果不指定远端名称和分支名,则抓取并更新所有分支
3.3.7 解决合并冲突
在一段时间内,A、B修改了同一个文件的同一行代码,此时发生合并冲突。
A用户在本地修改代码后提交到远程仓库,此时B用户在修改同一个文件,晚于A,因此需要先拉取远程仓库的提交,手动解决冲突,合并之后再提交到远端。
本期的分享就到这里,如果觉得博主的文章比较对胃口的话,可以点一个小小的关注~
您的三连是我持续更新的动力~