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.rhkb.cn/news/475485.html

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

相关文章

【数据结构】用四个例子来理解动态规划算法

1. 动态规划 动态规划&#xff08;Dynamic Programming, DP&#xff09;是一种通过将复杂问题分解为更小的子问题来求解的算法设计思想&#xff0c;一般用于求解具有最优子结构和重叠子问题性质的问题。动态规划的核心在于&#xff1a;&#xff08;1&#xff09;最优子结构--问…

前端两大利器:Vue与TypeScript的渊源

Vue 在前端领域占据着重要地位&#xff0c;是最受欢迎的前端框架之一。它被广泛应用于各种类型的 Web 应用开发&#xff0c;从简单的小型项目&#xff0c;如个人博客、公司宣传网站等&#xff0c;到复杂的大型企业级应用&#xff0c;如电商平台、金融系统等。例如&#xff0c;许…

【Python】使用Windows任务计划程序定时运行Python脚本!

在搭建了一个python 文件以后&#xff0c;如果我们想每天一次或者多次运行这个文件&#xff0c;或者想要一天运行多个python 文件&#xff0c;推荐可以使用&#xff1a; Win的【任务计划程序】 创建【批处理文件&#xff08;.bat&#xff09;】运行Python脚本。 我们可以在Wind…

分布式数据库中间件可以用在哪些场景呢

在数字化转型的浪潮中&#xff0c;企业面临着海量数据的存储、管理和分析挑战。华为云分布式数据库中间件&#xff08;DDM&#xff09;作为一款高效的数据管理解决方案&#xff0c;致力于帮助企业在多个场景中实现数据的高效管理和应用&#xff0c;提升业务效率和用户体验。九河…

Photino:通过.NET Core构建跨平台桌面应用程序,.net国产系统

一、Photino.NET简介&#xff1a; 最近发现了一个不错的框架 Photino.Net 一份代码运行&#xff0c;三个平台 windows max linux &#xff0c;其中windows10,windows11,ubuntu 18.04,ubuntu 20.04 已测试均可以。mac 因为没有相关电脑没有测试。 github:https://github.com/t…

NAT网络地址转换——Easy IP

NAT网络地址转换 Tip&#xff1a; EasylP没有地址池的概念,使用接口地址作为NAT转换的公有地址。EasylP适用于不具备固定公网IP地址的场景:如通过DHCP, PPPOE拨号获取地址的私有网络出口,可以直接使用获取到的动态地址进行转换。 本次实验模拟nat协议配置 AR1配置如下&…

Redis五大基本类型——List列表命令详解(命令用法详解+思维导图详解)

目录 一、List列表类型介绍 二、常见命令 1、LPUSH 2、LPUSHX 3、RPUSH 4、RPUSHX 5、LRANGE 6、LPOP 7、RPOP 8、LREM 9、LSET 10、LINDEX 11、LINSERT 12、LLEN 13、阻塞版本命令 BLPOP BRPOP 三、命令小结 相关内容&#xff1a; Redis五大基本类型——Ha…

单细胞转录组学在植物系统和合成生物学中的应用进展-文献精读83

Advances in the Application of Single-Cell Transcriptomics in Plant Systems and Synthetic Biology 单细胞转录组学在植物系统和合成生物学中的应用进展 最佳实践&#xff1a;教程-文献精读80 摘要 植物是由多种细胞类型组成的复杂系统&#xff0c;其结构呈现出分层的组…

【设计模式】如何用C++实现适配器模式

【设计模式】如何用C实现适配器模式 一、问题背景 用到过很多次适配器模式&#xff0c;一直不理解为什么用这种模式&#xff0c;好像这个模式天生就该如此使用。 实际上&#xff0c;我们很多的理念都源于一些简朴的思想&#xff0c;这些思想不一定高深&#xff0c;但是在保证…

详解八大排序(一)------(插入排序,选择排序,冒泡排序,希尔排序)

文章目录 前言1.插入排序&#xff08;InsertSort&#xff09;1.1 核心思路1.2 实现代码 2.选择排序&#xff08;SelectSort&#xff09;2.1 核心思路2.2 实现代码 3.冒泡排序&#xff08;BubbleSort&#xff09;3.1 核心思路3.2 实现代码 4.希尔排序&#xff08;ShellSort&…

《Django 5 By Example》阅读笔记:p679-p765

《Django 5 By Example》学习第10天&#xff0c;p679-p765总结&#xff0c;总计87页。 一、技术总结 1.channel 书里通过聊天软件功能演示Django中channel以及异步编程的应用&#xff0c;本人对这块不是很熟悉&#xff0c;不做评价。 2.deployment(部署) services:db:imag…

kali搭建pikachu靶场

前言&#xff1a; 总所周知搭个网站需要有apachemysqlphp&#xff0c;Apache是一个开源的Web服务器软件&#xff0c; MySQL是一种关系型数据库管理系统&#xff08;数据库&#xff09;&#xff0c;PHP是一种在服务器上执行的脚本语言 文章内容来自&#xff1a;【黑帽编程与攻…

C++时间复杂度与空间复杂度

一、时间复杂度&#xff08;Time Complexity&#xff09; 1. 概念 时间复杂度是用来衡量算法运行时间随着输入规模增长而增长的量级。它主要关注的是算法执行基本操作的次数与输入规模之间的关系&#xff0c;而非具体的运行时间&#xff08;因为实际运行时间会受硬件、编程语…

【软考】系统架构设计师-信息安全技术基础

信息安全核心知识点 信息安全5要素&#xff1a;机密性、完整性、可用性、可控性、审查性 信息安全范围&#xff1a;设备安全、数据安全、内容安全、行为安全 网络安全 网络安全的隐患体现在&#xff1a;物理安全性、软件安全漏洞、不兼容使用安全漏洞、选择合适的安全哲理 …

SQL Server Management Studio 的JDBC驱动程序和IDEA 连接

一、数据库准备 &#xff08;一&#xff09;启用 TCP/IP 协议 操作入口 首先&#xff0c;我们要找到 SQL Server 配置管理器&#xff0c;操作路径为&#xff1a;通过 “此电脑” 右键选择 “管理”&#xff0c;在弹出的 “计算机管理” 窗口中&#xff0c;找到 “服务和应用程…

类和对象——static 成员,匿名对象(C++)

1.static成员 a&#xff09;⽤static修饰的成员变量&#xff0c;称之为静态成员变量&#xff0c;静态成员变量⼀定要在类外进行初始化。 b&#xff09;静态成员变量为所有类对象所共享&#xff0c;不属于某个具体的对象&#xff0c;不存在对象中&#xff0c;存放在静态区。 …

游戏引擎学习第17天

视频参考:https://www.bilibili.com/video/BV1LPUpYJEXE/ 回顾上一天的内容 1. 整体目标&#xff1a; 处理键盘输入&#xff1a;将键盘输入的处理逻辑从平台特定的代码中分离出来&#xff0c;放入更独立的函数中以便管理。优化消息循环&#xff1a;确保消息循环能够有效处理 …

【JavaEE初阶 — 多线程】线程池

目录 1. 线程池的原理 1.1 为什么要有线程池 1.2 线程池的构造方法 1.3 线程池的核心参数 1.4 TimeUnit 1.5 工作队列的类型 1.6 工厂设计模式 1.6.1 工厂模式概念 1.6.2 使用工厂模式的好处 1.6.3 使用工厂模式的典型案例 1.6.4 Thread…

基于Vue+SpringBoot的求职招聘平台

平台概述 本平台是一个高效、便捷的人才与职位匹配系统&#xff0c;旨在为求职者与招聘者提供一站式服务。平台内设三大核心角色&#xff1a;求职者、招聘者以及超级管理员&#xff0c;每个角色拥有独特的功能模块&#xff0c;确保用户能够轻松完成从信息获取到最终录用的整个…

黑马点评 秒杀下单出现的问题:服务器异常---java.lang.NullPointerException: null(已解决)

前言&#xff1a; 在此之前找了好多资料&#xff0c;查了很多&#xff0c;都没有找到对应解决的方法&#xff0c;虽然知道是userid为空&#xff0c;但不知道要修改哪里&#xff0c;还是自己的debug能力不足&#xff0c;以后得多加练习。。。 问题如下&#xff1a; 点击限时抢…