Tools相关:深入浅出学Git

◆博主名称:少司府

欢迎来到少司府的博客☆*: .。. o(≧▽≦)o .。.:*☆

数据结构系列个人专栏:

初阶数据结构_少司府的博客-CSDN博客

C++基础个人专栏:

C++初阶_少司府的博客-CSDN博客

⭐琢玉成器终有时,笔底生花夺锦归

目录

一、概述

[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 开发中分支使用原则与流程)

三、Git远程仓库

[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,因此需要先拉取远程仓库的提交,手动解决冲突,合并之后再提交到远端。

本期的分享就到这里,如果觉得博主的文章比较对胃口的话,可以点一个小小的关注~

您的三连是我持续更新的动力~

相关推荐
神仙别闹1 小时前
基于MFC(C++)实现(界面)学委作业管理系统
开发语言·c++·mfc
ChampaignWolf1 小时前
Eclipse + GitHub Copilot = Lightspeed SAP ABAP Development
eclipse·github·copilot
2601_955781981 小时前
告别手动操作|Win11 OpenClaw 一键安装,电脑自动化躺平式实现
人工智能·github·open claw安装·open claw部署
艾莉丝努力练剑1 小时前
【Linux网络】Linux 网络编程:HTTP(三)HTTP 协议原理
linux·运维·服务器·网络·c++·http
多年小白1 小时前
今日A股 拉
大数据·人工智能·深度学习·microsoft·ai
2401_868534781 小时前
论快速应用开发方法及应用
大数据·python
字节高级特工1 小时前
C++11(一) 革新:右值引用与移动语义
java·开发语言·c++·人工智能·后端
叶之香1 小时前
一次 Kingston U 盘重定向中获取 Device Descriptor 超时问题排查
c++·windows·visual studio
UestcXiye1 小时前
GoogleTest 使用指南 | 单元覆盖率分析
c++·单元测试·googletest