GIT 入门详解指南

news2024/11/21 11:29:08

前言:


 注:本博客仅用于记录本人学习过程中对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.coloradmin.cn/o/2244648.html

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

相关文章

基于YOLOv8深度学习的违法暴力行为检测系统研究与实现(PyQt5界面+数据集+训练代码)

本研究提出了一种基于YOLOV8深度学习模型的违法暴力行为检测系统&#xff0c;并结合PyQt5框架实现了一个直观且易于操作的用户界面。随着监控系统在公共场所的广泛应用&#xff0c;如何快速、准确地识别并检测视频中的暴力和违法行为已成为当今公共安全管理中的重要挑战。现有的…

Flutter:RotationTransition旋转动画

配置vsync&#xff0c;需要实现一下with SingleTickerProviderStateMixinclass _MyHomePageState extends State<MyHomePage> with SingleTickerProviderStateMixin{// 定义 AnimationController late AnimationController _controller;overridevoid initState() {super…

Java基础知识(六)

文章目录 StringString、StringBuffer、StringBuilder 的区别&#xff1f;String 为什么是不可变的?字符串拼接用“” 还是 StringBuilder?String#equals() 和 Object#equals() 有何区别&#xff1f;字符串常量池的作用了解吗&#xff1f;String s1 new String("abc&qu…

微积分复习笔记 Calculus Volume 1 - 6.3 Volumes of Revolution: Cylindrical Shells

6.3 Volumes of Revolution: Cylindrical Shells - Calculus Volume 1 | OpenStax

开源在线聊天系统Fiora本地Docker快速搭建并实现与好友远程聊天

文章目录 前言1.关于Fiora2.安装Docker3.本地部署Fiora4.使用Fiora5.cpolar内网穿透工具安装6.创建远程连接公网地址7.固定Uptime Kuma公网地址 前言 相信大家在聊天时候总是很没安全感&#xff0c;比如在和小姐妹背着男朋友聊一些不能说的坏话&#xff0c;或者背着女朋友和兄…

基于Amazon Bedrock:一站式多模态数据处理新体验

目录 引言 关于Amazon Bedrock 基础模型体验 1、进入环境 2、发现模型及快速体验 3、打开 Amazon Bedrock 控制台 4、通过 Playgrounds 体验模型 &#xff08;1&#xff09;文本生成 &#xff08;2&#xff09;图片生成 关于资源清理 结束语 引言 在云计算和人工智能…

11.21 代码随想录Day37打卡(动态规划)

完全背包 题目&#xff1a;小明是一位科学家&#xff0c;他需要参加一场重要的国际科学大会&#xff0c;以展示自己的最新研究成果。他需要带一些研究材料&#xff0c;但是他的行李箱空间有限。这些研究材料包括实验设备、文献资料和实验样本等等&#xff0c;它们各自占据不同…

el-table实现最后一行合计功能并合并指定单元格

效果图如下&#xff1a; 表格代码如下&#xff1a; <el-table width"100%"ref"tableRef" style"margin-bottom: 15px;":data"jlData"class"tableHeader6"header-row-class-name"headerStyleTr6":row-class-n…

【Amazon】亚马逊云科技Amazon DynamoDB 实践Amazon DynamoDB

Amazon DynamoDB 是一种完全托管的 NoSQL 数据库服务&#xff0c;专为高性能和可扩展性设计&#xff0c;特别适合需要快速响应和高吞吐量的应用场景&#xff0c;如移动应用、游戏、物联网和实时分析等。 工作原理 Amazon DynamoDB 在任何规模下响应时间一律达毫秒级&#xff…

基于arduino 用ESP8266获取实时MAX30102 血氧数据动态曲线显示在网页上

基于arduino 用ESP8266获取实时MAX30102 血氧数据动态曲线显示在网页上 原理&#xff1a; ESP8266获取MAX30102 血氧数据&#xff08;R,IR,G的值&#xff09;发送到路由器局域网内&#xff0c;局域网内的手机电脑&#xff0c;访问ESP的ip地址&#xff0c;获取实时的血氧数据动…

PostgreSQL常用时间函数与时间计算提取示例说明

文章目录 常用函数与常量to_timestamp(字符串转时间戳、数字转时间戳)date与to_date(字符串转日期、时间戳转日期)interval(时间计算)基本操作与格式混合运算 to_char(各种时间转字符串)extract(提取时间字段&#xff0c;年月日时分秒&#xff0c;周、季度&#xff0c;第几周、…

【MATLAB源码-第218期】基于matlab的北方苍鹰优化算法(NGO)无人机三维路径规划,输出做短路径图和适应度曲线.

操作环境&#xff1a; MATLAB 2022a 1、算法描述 北方苍鹰优化算法&#xff08;Northern Goshawk Optimization&#xff0c;简称NGO&#xff09;是一种新兴的智能优化算法&#xff0c;灵感来源于北方苍鹰的捕猎行为。北方苍鹰是一种敏捷且高效的猛禽&#xff0c;广泛分布于北…

Android Studio启动模拟器显示超时

问题报错: Timed out after 300seconds waiting for emulator to come online. 解决方案&#xff1a;升级Android Emulator 情况二&#xff1a;Error while waiting for device:AVD Pixel_4a_API_32 is already running. If that is not the case, delete the files at E:\An…

Stable Diffusion经典应用场景

&#x1f33a;系列文章推荐&#x1f33a; 扩散模型系列文章正在持续的更新&#xff0c;更新节奏如下&#xff0c;先更新SD模型讲解&#xff0c;再更新相关的微调方法文章&#xff0c;敬请期待&#xff01;&#xff01;&#xff01;&#xff08;本文及其之前的文章均已更新&…

linux 常用命令指南(存储分区、存储挂载、docker迁移)

前言&#xff1a;由于目前机器存储空间不够&#xff0c;所以‘斥巨资’加了一块2T的机械硬盘&#xff0c;下面是对linux扩容的一系列操作&#xff0c;包含了磁盘空间的创建、删除&#xff1b;存储挂载&#xff1b;docker迁移&#xff1b;anaconda3迁移等。 一、存储分区 1.1 …

AI时代,百度的三大主义

现实主义、长期主义、理想主义。 定焦One&#xff08;dingjiaoone&#xff09;原创 作者 | 苏琦 郑浩钧 编辑 | 魏佳 “人工智能很像是一次新的工业革命&#xff0c;这意味着它不会三五年就结束&#xff0c;也不会一两年就出现‘超级应用’&#xff0c;它更像是三五十年对于整…

服务器Docker OOM RSS高问题排查思路

优质博文&#xff1a;IT-BLOG-CN 防走弯路为防止走弯路&#xff0c;强烈建议先仔细阅读以下加粗内容&#xff1a; 如果你的应用是因为公司最近降成本调小实例物理内存才出现docker oom&#xff0c;而之前从来没有出现过&#xff0c;那么大概率是堆内存太大导致&#xff0c;这种…

Ubuntu Linux使用前准备动作_使用root登录图形化界面

Ubuntu默认是不允许使用 root 登录图形化界面的。这是出于安全考虑的设置。但如果有需要&#xff0c;可以通过以下步骤来实现使用 root 登录&#xff1a; 1、设置 root 密码 打开终端&#xff0c;使用当前的管理员账户登录系统。在终端中输入命令sudo passwd root&#xff0c…

core 不可变类型 线程安全 record

当一个类型的对象在创建时被指定状态后&#xff0c;就不会再变化的对象&#xff0c;我们称之为不可变类型。这种类型是线程安全的&#xff0c;不需要进行线程同步&#xff0c;非常适合并行计算的数据共享。它减少了更新对象会引起各种bug的风险&#xff0c;更为安全。 System.D…

Python-简单病毒程序合集(一)

前言&#xff1a;简单又有趣的Python恶搞代码&#xff0c;往往能给我们枯燥无味的生活带来一点乐趣&#xff0c;激发我们对编程的最原始的热爱。那么话不多说&#xff0c;我们直接开始今天的编程之路。 编程思路&#xff1a;本次我们将会用到os,paltform,threading,ctypes,sys,…