GIT 入门详解指南

前言:


 注:本博客仅用于记录本人学习过程中对git的理解,仅供学习参考,如有异议请自行查资料求证


安装

使用git之前必须完成git的安装,Git 目前支持 Linux/Unix、Solaris、Mac和 Windows 平台上运行

git 安装教程


基本概念


git基础命令

定义:git 指令使用前准备先使用git命令配置用户的名字和用户的邮箱

//git指令配置用户名
git config --global user.name "userName"// git 指令配置用户的邮箱地址
git config --global user.email "email.com"

注:Local 表示配置到本地,此处做出省略【本地配置,只对本地仓库有效 】,--global : 全局配置,所有仓库生效,--system :系统配置,对所有用户生效,这两个指令只需要执行一次。


git 指令保存用户名与密码

git config --global credential.helper store

查看git的配置信息

git config --global --list

新建版本库


定义:新建版本库的目的是更好的对本地的仓库进行管理,git 仓库分为两种,一种是本地仓库,一种是远程仓库

初始化一个本地仓库

git init ----------------> 在自己电脑的本地创建一个仓库

注:使用git init 指令进入对应的目录,可以将本地的文件初始化为一个本地仓库


创建本地仓库的步骤

1.0 mkdir learn-git       // 创建一个名字为learn-git的文件夹2.0 cd learn-git          // 进入刚刚创建的文件夹3.0 git init              // 初始化文件夹为本地仓库

实操演示:


创建远程仓库


远程克隆一个仓库

git clone "远程仓库的地址"

 注:远程仓库克隆不做实际演示


1.0 工作区域和文件状态

git 的工作区与文件状态

git 的工作区:工作区可以理解为我们本地的目录,也就是我们电脑可以看到的目录

git 的暂存区:可以理解为临时存储文件的地方【或者文件的中转站】

git 的本地仓库:可以理解为git的版本库里面有一个.git的目录

注:从以上的这张图可以了解到暂存区就像是一辆转运卡车用来将工作区中的文件转运提交到本地仓库中,版本控制系统中保存文件的方式就称之为提交


2.0 git中文件的工作状态

 各个文件不同状态讲解

3.0 如何将文件添加到仓库

git init        创建仓库git status      查看仓库的状态git add         将仓库文件添加到暂存区git commit      将暂存区中的文件添加到本地仓库

 实操演示

查看文件状态指令

git status     // 显示文件的状态

注:文件显示为红色表示文件还未被提交到暂存区

git add .        // 将当前所有文件添加到暂存区git add fileNamw // 将指定文件添加到暂存区

 -m 参数的后面跟着的是文件的提交信息

git commit -m "这是提交文件的信息"   // 将文件提交到本地仓库

实操演示

注:git 文件的提交,将文件提交到本地的仓库,在将文件提交到本地仓库的同时需要使用-m指令将文件提交的信息同时提交大本地仓库中

注 :git commit 只会提交暂存区中的文件而不会提交本地中的文件,在使用git commit 这个命令的时候需要加上 -m 来显示提交的信息。


4.0 通配符

通配符的定义

通配符是用于在文件系统中匹配文件名或文本模式的特殊字符。它们在很多操作系统、命令行工具和编程语言中都有应用

通配符的使用

【星号】:   *        表示匹配 “零” 个或者 “多个” 字符,如:*.txt 表示匹配以txt结尾的所有文件

【问号】:     ?        表示匹配单个字符,如:file?.txt 表示匹配 file1.txt 或者 file2.txt等文件

【方括号】:  [ ]       表示匹配方括号内列出的任何一个字符。例如,file1[123].txt可以匹配    file1.txt、file2.txt 或 file3.txt

【大括号】:{ }        用于创建模式组合如 {*.jpg, *.png} 可以匹配所有以 .jpg.png 结尾的文 件名。


5.0 git 中通配符的使用

使用git add *.txt 将所有以txt结尾的文件添加到暂存区中  

注:git add . 可以将当前文件夹中的所有文件添加到暂存区中


在 git 中可以使用git log 指令查看提交的信息

git log --oneline --graph --decorate all 指令:查看文件的提交树

git 仓库中指令总结


6.0 git reset 指令


定义:git reset命令有三种不同的用法,后面可以跟着不同的参数:分别代表的含义是软的,硬的,混合的。


 回退版本的三种模式

git reset --soft 表示的是回退到某一个版本,并且保存工作区和暂存区的修改

git reset --hard 表示的是回退到之前的某一个版本,并且丢弃掉工作区和暂存区的修改

git reset --mixed 回退到某一个版本,只保留工作区的修改内容,丢弃暂存区的修改内容

实际操作

...随后补充


git diff 查看工作区,暂存区,本地仓库之间的差异

git diff后面什么文件都不加的话显示的是工作区和暂存区的内容

比较工作区和暂存区之间的差异 git diff

比较工作区和版本库之间的差异 git diff HEAD

比较暂存区和版本库之间的差异 git diff --cached

git diff master HEAD^    ----------> 对比本次提交和上次提交的差别git diff master HEAD~3  ----------->对比本次提交和前面3次提交的差别

提交文件到本地仓库

git commit -m "commit4"


7.0  git 中HEAD的含义


head含义表示的是指向当前最新的提交节点

git diff HEAD~ HEAD                          -------> 比较当前版本和上一个版本的区别

git diff HEAD^ HEAD                          -------> 也是比较当前版本和上一个版本的区别

git diff HEAD~3 HEAD                        -------> 表示比较当前版本和前面三个版本的区别

git diff HEAD~3 HEAD file3.txt            -------> 查看file3的差异内容

git diff 还可以查看两个分支之间的差异【这个时候直接加上两个分支的名字即可】



8.0 如何从版本库中删除文件

定义:如何删除本地仓库中的内容?使用 rm 指令删除指令中的内容

rm flie1.txt         // 删除文件

查看当前目录下的文件

ls                  查看当前目录下的文件

git add file.txt  表示将这个文件从暂存区中删除掉

如何使用git rm 这个命令删除我们不需要的版本库,git rm file2.txt 将程序从咱们的版本库中删除,同时暂存区中也删除


 9.0 gitignore的作用

忽视gitignore文件,被该文件引用的文件不提交

gitignore 的作用忽视省略不提交相关文件

...后续补充


推送到远程仓库


以下是常见的远程代码托管平台

github 代码托管平台

github注册指南:windows安装git(全网最详细,保姆教程)-CSDN博客


gitee 代码托管平台

gitee 注册指南 :10、Git之国内项目托管平台(Gitee码云) - Javaer1995 - 博客园


如何注册 github

github注册指南:注册Github账号详细教程【超详细篇 适合新手入门】_github注册-CSDN博客


1.0 创建github仓库

 注:由于github是一个外国的网站访问的时候需要挂梯子

第一步:登录github创建自己的仓库

 第二步:创建远程仓库

第三步:将本地仓库和远程仓库关联起来


2.0 克隆远程仓库

注:使用git clone 指令克隆远程仓库

git clone “远程仓库的地址”

访问远程仓库有两种方式一种是https的方式,一种是ssh方式

https 的方式需要在拉取远程仓库的时候提供自己的用户名和密码

ssh 的方式不需要在拉取的时候提供自己的用户名和密码,但是需要配置ssh秘钥


3.0 配置ssh秘钥

1.0  cd ~   进入用户的根目录2.0  cd .ssh 进入用户的ssh目录3.0 ssh-keygen -t rsa -b 4096 生成咱们的ssh秘钥远程仓库生成秘钥之后需要进入公钥将里面的钥匙放进远程仓库

注:当指定一个新文件名的时候需要进行这一步操作

tail  -5   config

将以下的5行内容添加到github里面,这个文件的意思是当我们访问github.com的时候指定使用ssh下的test这个秘钥

注:当前面的步骤指定新的文件名的时候需要使用这个步骤,否则不需要进行这个步骤


4.0 克隆远程数据库

定义:使用克隆命令将远程创建的仓库克隆到本地


5.0 git 简介


git 是一种分布式的版本控制系统,本地仓库和远程仓库是2个仓库它们之间是相互独立的,本地仓库的修改不会影响到远程的仓库,远程仓库的修改也不会影响到本地的仓库


这个时候我们需要一种机制来同步远程仓库和本地仓库的修改内容,让本地仓库和远程仓库的状态保持一致

git push 将本地仓库的内容推送到远程仓库

使用我们的推送命令将本地仓库的内容推送到远程仓库成功,查看远程仓库进行验证


本地已经有一个仓库的情况下如何将程序放到远程仓库?

在github上新创建一个仓库回到命令行将本地的仓库推送到远程

使用 git remote add origin 远程仓库的地址

执行完成之后使用 git remote -v 查看我们当前仓库对应的远程仓库别名和地址

执行完以上两个命令之后本地仓库就已经被推送到我们的远程仓库了,这个origin表示的是远程仓库的地址名。


git branch -M main   这一行代码的意思是指定分支的名称为main

(注:如果本地仓库和远程仓库的别名不同需要将本地仓库的地址切换到远程仓库)

git push -u origin main 这一行代码的含义是把本地的main分支和远程的origin仓库的main分支关联起来,实际上补全的写法是git push -u origin main:main。


如果我们在远程仓库修改了部分的内容,那么我们需要将远程仓库的内容拉取到本地

github上的文件是可以直接编辑的


【演示----> 在github上的修改模拟远程仓库的修改和拉取,通常远程仓库的内容是程序员在本地修改之后推送到远程仓库的,我们需要将远程仓库上修改的内容推送到本地】

这个时候远程仓库已经有了一个新的文件,但是我们本地仓库还有一个文件的内容没有被获取,这个时候我们需要使用pull 命令将远程仓库的内容拉取到本地仓库。


git pull命令详解

git pull <远程仓库名> <远程分支名>:<本地分支名>

可以直接使用 git pull 进行拉取省略远程仓库名,远程分支名【这个时候默认拉取的就是远程仓库中名字为origin的分支】。

如果不省略的话拉取的就是指定仓库的指定分支名。

使用 ls 命令查看咱们本地的文件仓库目录显示远程目录中的内容已经同步到本地仓库了


注:在我们从远程仓库拉取代码的同时,本地本地仓库中的内容会自动的和远程仓库中的内容做比对,如果本地仓库的内容和远程仓库的内容有冲突是不会进行合并操作的。

从远程仓库获取内容还可以使用fetch命令,区别在于fetch命令只是获取远程仓库的修改,但是并不会自动合并到本地仓库中,需要我们手动的将文件合并到本地仓库中

总结:


国内代码托管平台

如何使用国内的平台托管我们的仓库,gitee 和 gitLab


1.0 gitLab的使用

GitLab代码管理_源代码管理工具_代码仓库_代码托管平台_代码安全审计-极狐GitLab

私有化部署表示的是我们可以在自己的服务器上部署一个自己的代码托管服务

部署的过程可以参考gitLab的官方文档

..................


如何使用GUI工具和IDE如何使用git

了解市面上常见的GUI工具【后续补充】


2.0 如何在VSCode中使用git

如何在VSCode中使用git------重要-----


3.0 git 中的分支介绍


分支的使用场景适用于协同开发的场景

git 中分支的基本操作

mkdir branch-demo         创建一个branch-demo文件夹

cd branch-demo               进入branch-demo文件夹

git init                              初始化本地仓库       


分支的命名方式

git 中分支的基本操作,使用分支名加序号的方式来命名文件,分支名加冒号加序号的方式来编写提交记录

在此次的git文件命令中使用


echo mian1 > main1.txt 创建一个文件

git add . 将文件添加到暂存区

git commit -m "描述" 将文件添加到本地仓库


echo mian2 > main2.txt 创建一个文件

git add . 将文件添加到暂存区

git commit -m "描述" 将文件添加到本地仓库


echo mian3 > main3.txt 创建一个文件

git add . 将文件添加到暂存区

git commit -m "描述" 将文件添加到本地仓库


如何创建一个新的分支 git branch "branch-name" 创建一个新的分支

使用git branch “branch-name”  ----------------创建一个新的分支

git branch dev

【注:使用git checkout切换分支的时候可能会存在一些潜在的问题】

git checkout 命令不仅仅可以用来切换分支还可以用来修改之前的一些相关文件,为了解决这个问题git官方还为我们提供了一个解决问题的方案,就是使用swtich指令切换分支


git switch 切换分支的名称

如何将代码分钟中的功能合并到主线,可以使用git merge功能将分支中的代码合并到主线

git merge dev 【注:merge 后面的分支名称是将要被合并的分支,当前所在的分支是合并后的目标分支】

如果我们要把dev 分支合并到main分支的话就需要首先切换到main分支中,然后执行git merge dev命令

将分支中的内容合并到主干分支

在命令行中可以通过git log 查看我们的分支图

git log --graph --oneline

查看git的提交树

git log --graph --oneline --decorate --all

如何使用分支图查看分支的提交过程


4.0 删除分支

git branch -b “branchName”            表示的含义是删除已经合并的分支git branch -D “branchName”           表示的含义是删除还没有合并的分支


5.0 分支合并冲突

git commit -a -m "feat:1" 在提交命令的后面加上 -a 这个参数就可以一次性完成暂存和提交的任务 

冲突指的是在分支中修改了文件的内容,同时在主分支中也修改了文件的内容,两个文件的内容修改都不一样,如果对分支进行合并这个时候就会出现文件冲突,此时我们需要手动修改文件的内容,得到我们想要的效果,对文件进行重新的提交。

【以上是在合并时解决冲突的过程】


6.0 不同分支合并

在git 中想要将不同分支的内容整合到一起可以使用rebase 中文翻译过来就是变基的意思

使用Merge合并的效果

rebase 和main分支的不同

使用rebase的话,可以在任意的分支上执行,可以在main分支上执行rebase操作,也可以在子分支上执行。

如果在dev分支上执行rebase操作结果就是dev分支上的两次提交记录就会变基到main分支上

如果是在main分支上执行提交记录,那么main分支上的提交记录就会变基到dev分支上


7.0 HEAD 的作用

在分支中,每一个分支的提交记录都会有一个最新的指针指向当前最新的提交记录,这个指针的名称称之为HEAD

实际演示

如何使用指令删除已经提交的分支:git checkout -b branchName branch_id

由于命令太长可以使用alias命令将文件定义成一个简短的命令

alias graph = "git log --oneline --graph --decorate --all"

linux 复制文件夹的命令

cp -rf file-name option-name

知识回顾,第一个rebase命令需要切换到面分支然后变基到main分支中进行合并

如果使用rebase就想是嫁接移植的方式进行管理

切换目录修改文件

-----将当前的项目文件嫁接到另外的一个分支文件中-----

Rebase 和 merge 的区别,该如何区分使用

避免在一个共享分支上进行rebase操作【在公共的分支上不要执行rebase操作】

git rebase 一定要避免在共享分支中使用


git 分支管理中的工作流模型

主线分支中的代码一般是直接发布到生产环节的,主版本号主要表示的是功能的变化和更新

gitHub Flow模型:主分支上的代码是直接部署到生产环境中的,团队的成员可以对代码进行review评审

注:以上内容均基于本人理解撰写,仅供学习参考


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/61141.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

讯飞、阿里云、腾讯云:Android 语音合成服务对比选择

在 移动端 接入语音合成方面&#xff0c;讯飞和腾讯云等都是优秀的选择&#xff0c;但各有其特点和优势。咱们的需求是需要支持普通话/英语/法语三种语言&#xff0c;以下是对各个平台的详细比较&#xff1a; 一、讯飞语音合成介绍 与语音听写相反&#xff0c;语音合成是将一段…

HarmonyOS本地存储-Preferences(用户首选项)的使用

一&#xff0c;用户首选项简述 ohos.data.preferences (用户首选项) 用户首选项为应用提供Key-Value键值型的数据处理能力&#xff0c;支持应用持久化轻量级数据&#xff0c;并对其修改和查询。 数据存储形式为键值对&#xff0c;键的类型为字符串型&#xff0c;值的存储数据…

【机器学习】回归模型(线性回归+逻辑回归)原理详解

线性回归 Linear Regression 1 概述 线性回归类似高中的线性规划题目。线性回归要做的是就是找到一个数学公式能相对较完美地把所有自变量组合&#xff08;加减乘除&#xff09;起来&#xff0c;得到的结果和目标接近。 线性回归分为一元线性回归和多元线性回归。 2 一元线…

OceanBase 分区表详解

1、分区表的定义 在OceanBase数据库中&#xff0c;普通的表数据可以根据预设的规则被分割并存储到不同的数据区块中&#xff0c;同一区块的数据是在一个物理存储上。这样被分区块的表被称为分区表&#xff0c;而其中的每一个独立的数据区块则被称为一个分区。 如下图所示&…

【Android原生问题分析】夸克、抖音划动无响应问题【Android14】

1 问题描述 偶现问题&#xff0c;用户打开夸克、抖音后&#xff0c;在界面上划动无响应&#xff0c;但是没有ANR。回到Launcher后再次打开夸克/抖音&#xff0c;发现App的界面发生了变化&#xff0c;但是仍然是划不动的。 2 log初分析 复现问题附近的log为&#xff1a; 用户…

使用 K-means 算法进行豆瓣读书数据的文本聚类分析

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

Django5 2024全栈开发指南(二):Django项目配置详解

目录 一、基本配置信息二、资源文件配置2.1 资源路由——STATIC_URL2.2 资源集合——STATICFILES_DIRS2.3 资源部署——STATIC_ROOT2.2.4 媒体资源——MEDIA 三、模板配置四、数据库配置4.1 mysqlclient连接MySQL4.2 pymysql连接MySQL4.3 多个数据库的连接方式4.4 使用配置文件…

数据结构-二叉搜索树(Java语言)

目录 1.概念 2.查找search 3.插入insert ​编辑4.删除remove&#xff08;难点&#xff09; 5.性能分析 1.概念 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&#xff0c;或者是具有以下性质的二叉树 : 1.若它的左子树不为空&#xff0c;则左子树上所有节点的值都…

学习笔记:黑马程序员JavaWeb开发教程(2024.11.18)

9.8 Mybatis-基础操作-查询&#xff08;条件查询&#xff09; 需要模糊查询&#xff0c;根据要求&#xff0c;我们需要在关键词前后都加上%&#xff0c;但是我们不能使用‘%#{内容}%’的形式&#xff0c;因为#{内容}最终会变成?&#xff0c;而?不能放在‘’之中&#xff…

数据分析-48-时间序列变点检测之在线实时数据的CPD

文章目录 1 时间序列结构1.1 变化点的定义1.2 结构变化的类型1.2.1 水平变化1.2.2 方差变化1.3 变点检测1.3.1 离线数据检测方法1.3.2 实时数据检测方法2 模拟数据2.1 模拟恒定方差数据2.2 模拟变化方差数据3 实时数据CPD3.1 SDAR学习算法3.2 Changefinder模块3.3 恒定方差CPD3…

学习大数据DAY61 宽表加工

目录 模型设计 加工宽表 任务调度&#xff1a; 大表 - 把很多数据整合起来 方便后续的明细查询和指标计算 模型设计 设计 建模 设计: excel 文档去编写 建模: 使用建模工具 PowerDesigner Navicat 在线画图工具... 把表结构给绘 制出来 共享\项目课工具\pd 加工宽表 数…

C#.Net筑基-模式匹配汇总

01、模式匹配概述 从C#7开始支持的 模式匹配 语法&#xff08;糖&#xff0c;挺甜&#xff09;&#xff0c;可非常灵活的对数据进行条件匹配和提取&#xff0c;经过多个版本的完善&#xff0c;已经非常强大了。 C# 支持多种模式&#xff0c;包括声明、类型、常量、关系、属性…

Python蓝桥杯刷题1

1.确定字符串是否包含唯一字符 题解&#xff1a;调用count函数计算每一个字符出现的次数&#xff0c;如果不等于1就输出no&#xff0c;并且结束循环&#xff0c;如果等于1就一直循环直到计算到最后一个字符&#xff0c;若最后一个字符也满足条件&#xff0c;则输出yes import…

Unity类银河战士恶魔城学习总结(P127 Stat ToolTip属性提示)

【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili 教程源地址&#xff1a;https://www.udemy.com/course/2d-rpg-alexdev/ 本章节实现了把鼠标放到属性上面就会显示属性的作用 UI_StatToolTip.cs 这段代码实现了一个UI提示框&#xff08;ToolTip&#xff09;功能…

计算机编程中的事件驱动编程模型及其在构建响应式用户界面中的应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 计算机编程中的事件驱动编程模型及其在构建响应式用户界面中的应用 计算机编程中的事件驱动编程模型及其在构建响应式用户界面中…

ROS第九梯:ROS+VSCode+Python+C++自定义消息发布和订阅

首先,Python版本的ROS项目和C++版本的ROS项目前期创建功能包的步骤基本一致,具体可参考第二章。 费一步:新建msg文件 在功能包(data_input)目录下创建一个msg文件夹,并在msg文件夹下创建一个名为Box的msg文件,具体如下图所示: 该msg文件为一个用于描述3D Box的文件,…

selenium元素定位---元素点击交互异常解决方法

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 1、异常原因 在编写ui自动化时&#xff0c;执行报错元素无法点击&#xff1a;ElementClickInterceptedException 具体报错&#xff1a;selenium.common.exc…

Front Panel Window Bounds 与 Front Panel Window Bounds 的区别与应用

在LabVIEW中&#xff0c;Front Panel Window Bounds 和 Front Panel WindowBounds 是两个不同的属性节点&#xff0c;用于描述前面板窗口的位置和大小。它们的区别主要体现在它们表示的是窗口的不同部分&#xff0c;具体如下&#xff1a; 1 Window Bounds&#xff1a;调整整个…

H.265流媒体播放器EasyPlayer.js播放器出现加载视频等待画面时长过长的原因排查

在数字媒体时代&#xff0c;用户体验是衡量播放器性能的关键指标之一。EasyPlayer.js网页web无插件播放器作为一款流行的Web视频播放器&#xff0c;其加载速度和响应时间直接影响着用户的观看体验。 1、问题描述 加载视频等待画面时长过长。 2、可能的原因&#xff1a; 检查下…

计算机网络-MSTP基础实验一(单域多实例)

前面我们已经大致了解了MSTP的基本概念和工作原理&#xff0c;但是我自己也觉得MSTP的理论很复杂不结合实验是很难搞懂的&#xff0c;今天来做一个配套的小实验以及一些配置命令。 一、网络拓扑 单域多实例拓扑 基本需求&#xff1a;SW1为VLAN10的网关&#xff0c;SW2为VLAN20的…