前言:


        不知道大家有没有使用git提交代码或者拉取代码的经历,自从上一家公司实习结束以后,对git的使用历历在目,从一开始的add、commit到后来的pull都有着许多的疑惑。

        自从有一次merge代码以后,被师兄批了一顿以后(不小心把师兄写的代码给覆盖了!!尴尬),我下定决心要搞明白git的基本原理以及使用方法!!!!!

git的安装:

        git的安装尽量到官网去安装(毕竟是免费的),当然如果有网盘安装地址也可。

        官方安装地址:https://git-scm.com/

 

根据电脑的系统选择安装的方式:

注:安装路径尽量是英文的安装路径。

安装完成后,如果在桌面右键,菜单里面出现了如下选项:

证明安装成功!!!

注册身份:

        由于git是用来适应多人协作工作时的需求,所以每个人提交代码时需要有身份的说明,所以当安装好git以后就需要注册或者说设置使用者的身份,这里我使用

命令框进行身份的设置:

代码如下:

git config --global user.name 你的用户名

git config --global user.email 你的邮箱地址

 

kong'jian'shuo'm注意:后面你的用户名和邮箱号必须要用 " " 引起来(否则就会报bash: $'\302\226git': command not found错误

空间说明:

        在搞懂git所有使用命令之前首先要了解git的所有存储空间,都有什么作用。

Workspace:工作区(数据存储在缓存中)
Index / Stage:暂存区(数据存储在内存中)
Repository:仓库区(或本地仓库)(数据存储在硬盘中)
Remote:远程仓库(数据存储在远程仓库中)

 上述的四个区域对所有命令指令的理解非常重要,需要理解+记忆

git的使用步骤:

        了解了区域以后就可以展开对git使用的理解了。我将从以下几点对git的操作展开:

一:提交文件信息(本地——>远程):

1.git init 初始化git(将指定的文件夹交给git进行管理)

2.git add 将文件添加进暂存区

3.git commit 将文件提交到本地仓库

4.git push 将文件提交到远程仓库

二:拉取远程仓库中的文件信息(远程——>本地):

1.git pull 拉取远程代码

git Init初始化git:

        如果此时创建一个普通的文件夹:

里面假设有一个文本文件:

那么我想要把这个文件推送到我的gitee仓库进行管理,我应该怎么做?

首先就是要将这个文件交给git进行管理,此时可以在这个文件中打开git控制台:

之后如果想要将该文件夹创建为git的版本库,也就是交给git进行管理的话,使用:
git init 命令

之后文件夹中会多出一个隐藏文件夹:

如果没有找到的话需要从这里进行勾选"隐藏项目":

如果出现了那证明第一步就完成了,将该文件夹交给git管理成功。

本地——>远程

git add:

        add指令是将文件信息放入暂存区,也就是暂存区(内存中),完整代码如下:

git add [选项] [文件路径]

-h--help显示帮助信息
-v--verbose显示详细输出,显示每个文件的处理过程
-f--force强制添加,即使文件被忽略也会添加
-u--update仅添加已跟踪文件的修改,不添加新文件
-A--all添加所有文件(包括新文件、修改文件、删除文件)
--ignore-removal忽略删除操作,只添加修改和新文件
--patch-p交互式添加,逐块选择要添加的代码变更
--intent-to-add标记文件为 “待添加”,不实际添加内容,用于后续提交
-i--interactive交互式模式,分步选择要添加的文件和变更
git add .  # 添加当前目录下的所有文件
git add *  # 添加当前目录下的所有文件(与 . 类似,但不包含隐藏文件)
git add --all  # 等价于 git add .,但更明确

一般用的最多的就是add .(适用于大多是程序员) 

git commit:

        将需要上传的文件信息放入缓存区以后,就需要将缓存区的文件进行整理放入本地仓库中为接下来的往远程仓库提交做准备。

        当然有人问了为什么要设计这样一个过程,我直接add完之后,直接把文件信息提交到远程仓库不香吗~

        设计git的大佬这样设计肯定有道理滴,如果此时一个文件同时被A,B,C三人改写,B提交了,那么A和C提交的时候会不会就把B的给覆盖了?

        答案是肯定会的,那么为了防止出现上述的情况,此时就设计了一个解决冲突的过程,这个后面再说~ (后续在git pull操作会说)

完整代码如下:

git commit [选项] [-m "提交信息"] [文件路径]
选项描述
-m--message "信息"直接指定提交信息
-a--all提交所有已跟踪文件的修改(等价于先 git add -u 再提交)
-s--signoff在提交信息末尾添加 Signed-off-by 签名
-c--amend修改最后一次提交(用于修正提交信息或添加遗漏的变更)
-v--verbose在提交信息中显示文件差异
-F--file <文件>从文件中读取提交信息
--no-verify跳过提交验证钩子(如代码规范检查)
--dry-run模拟提交,不实际执行
-i--interactive交互式选择要提交的代码块
-S--gpg-sign使用 GPG 签名提交(需配置 GPG 密钥)

 大多数程序员会用到的操作:

git commit -m "初始化项目结构"  # 提交暂存区所有文件并添加信息
git commit src/index.js -m "修改首页布局"  # 仅提交指定文件

如果执行上述操作以后就相当于把文件信息放在.git文件中的版本库中了(放在硬盘中) ,当然。git文件中的版本库和普通文件夹是有区别的。

版本库可以记录每一次提交的版本,每次commit的数据内容会被永久的记录在磁盘中方便后续查看历史提交记录。

git的好处是在每次提交时,会保存提交信息的快照内容(完整的副本信息)。每次commit时会通过哈希算法创建一个唯一id,之后将创建一棵git数,如下:

那么有一个问题,在多人合作时,如果上一个人已经push代码,此时我commit时发生了冲突,git是如何发现我commit的内容与其他人的内容是冲突的?(留在后续解答)

git push:

        如果完成了上述的操作之后,接下来就需要进行最后一步就可以将信息资源上传到远程仓库了,需要git push操作。

        git push 会将上述commit的所有本地仓库中未推送至远程仓库的信息全部推送上去。

        具体语法如下:

git push [远程仓库名] [本地分支名]:[远程分支名]

 远程——>本地

上述的操作都是如何将信息一步步的推送至远程仓库中。接下来的操作是如何将远程仓库中的信息拉取到本地。

git clone:

        如何我们在浏览git hub时,发现有博主研究出新的插件玩法,我们想要拉取博主的源码研究研究,此时可以使用git clone命令拉取。(以网址的方式拉取)

        

        除了以网址的方式拉取以外,还可以以SSH密钥的解密的方式拉取

    

    当然想要将源码获取到的方式也有很多,git clone是方法之一。也可以直接将资源信息下载下来使用。

git pull:

        如果之前就已经拉取过代码,此时如果你以后拉过一次代码后可以直接在idea中进行拉取仓库最新代码。

        语法如下:

git pull [远程仓库名] [远程分支名]:[本地分支名]

原理分解:

         git pull 命令实则是两个命令的合体:

  1. git fetch:从远程仓库下载所有提交和文件更新。
  2. git merge:将下载的更新合并到当前本地分支。

        所以在没有进行commit,如果直接pull代码的话会出现问题,就是会自动将远程代码与当前本地分支的代码进行合并,有可能会直接覆盖当前自己写的代码

注意:

        如果此时直接进行pull代码,pull过来的代码会直接与当前

        如果此时将拉取的代码已经修改过一部分以后,想要pull一下仓库中的最新代码,此时需要做的是先要将所写的代码commit到本地仓库,之后进行pull。

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

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

相关文章

RHEL 9.5 离线安装 Ansible 完整教程

文章目录RHEL 9.5 离线安装 Ansible 完整教程环境准备系统要求准备工作清单方法一&#xff1a;使用 RPM 包离线安装步骤 1&#xff1a;在联网机器上下载必要的 RPM 包步骤 2&#xff1a;创建本地仓库元数据步骤 3&#xff1a;在离线服务器上安装方法二&#xff1a;使用 Python …

44、鸿蒙HarmonyOS Next开发:视频播放 (Video)组件和进度条 (Progress)组件的使用

目录 视频播放 (Video) 创建视频组件 加载视频资源 加载本地视频 加载沙箱路径视频 加载网络视频 添加属性 事件调用 Video控制器使用 其他说明 示例代码 进度条 (Progress) 创建进度条 设置进度条样式 场景示例 视频播放 (Video) Video组件用于播放视频文件并…

6、微服务架构常用十种设计模式

目录 1、微服务架构 2、微服务架构的优点 3、微服务架构的缺点 4、何时使用微服务架构 5、微服务架构常用十种设计模式 ① 独享数据库&#xff08;Database per Microservice&#xff09; ② 事件源&#xff08;Event Sourcing&#xff09; ③ 命令和查询职责分离&…

Docker 初学者需要了解的几个知识点 (六):docker-compose.yml (ThinkPHP)

下面这个文 docker-compose.yml 文件定义了一个包含 PHP、Nginx、MySQL、Redis 的完整 ThinkPHP 开发环境&#xff0c;各配置项的含义如下&#xff1a;version: 3.8services:# PHP-FPM 服务php-fpm:image: php:8.1-fpmvolumes:- ./tp-demo:/var/www/html- ./php.ini:/usr/local…

TiDB 详解

TiDB 详解&#xff1a;架构、特性与应用实践 TiDB 是 PingCAP 公司开发的开源分布式 NewSQL 数据库&#xff0c;采用 “计算-存储分离” 架构设计&#xff0c;兼具传统关系型数据库的 ACID 事务特性和 NoSQL 系统的水平扩展能力。以下是 TiDB 的全面技术解析。一、核心架构设计…

推客小程序商业模型设计:合规分佣体系×盈利模式×LTV提升策略

一、推客小程序的市场背景与商业价值在当今移动互联网红利逐渐消退的背景下&#xff0c;社交电商正成为流量增长的新突破口。推客小程序作为一种基于社交关系的分销工具&#xff0c;完美融合了社交传播与电商变现的双重优势&#xff0c;为企业和个人创业者提供了全新的商业机会…

Matlab处理多个循环的判断的方式:

1、使用正则表达式&#xff1a;pattern strcat(\b, strjoin(tuple, \b|\b), \b);% 4. 逐行处理文件内容 modifiedContents {}; % 存储修改后的内容 for i 1:length(fileContents)line fileContents{i};% 使用正则表达式检查当前行是否包含元组中的任何元素if ~isempty(reg…

从字符串中“薅出”最长子串:LeetCode 340 Swift 解法全解析

文章目录摘要描述题解答案题解代码分析详细解析&#xff1a;示例测试及结果结果解释&#xff1a;时间复杂度总结摘要 在日常开发中&#xff0c;我们经常需要处理字符串&#xff0c;比如分析用户输入、文本挖掘、数据清洗等等。而这道题就特别实用&#xff1a;如何找到一个字符…

时序数据库厂商 TDengine 发布 AI 原生的工业数据管理平台 IDMP,“无问智推”改变数据消费范式

在工业企业越来越依赖数据驱动决策的今天&#xff0c;数据的获取不再是难题&#xff0c;难的是从纷繁复杂的数据中提炼出有用的信息。而 AI 的崛起&#xff0c;正在重塑整个数据分析的逻辑。 7 月 29 日晚&#xff0c;TDengine 发布了一款全新产品 —— TDengine IDMP&#xf…

HBase、MongoDB 和 Redis 的区别详解

这三者都是流行的 NoSQL 数据库&#xff0c;但设计目标、数据模型和适用场景有显著差异。以下是它们的核心对比&#xff1a; 1. 数据模型对比特性HBaseMongoDBRedis数据模型宽列存储&#xff08;类似 BigTable&#xff09;文档存储&#xff08;BSON/JSON&#xff09;键值存储&a…

设计模式之单例模式及其在多线程下的使用

很多时候&#xff0c;我们在使用类创建类的实例并不想可以创建很多实例对象&#xff0c;比如在数据库连接的时候&#xff0c;对于一个数据库的连接通常只需要连接池中的某个连接的实例&#xff0c;连接一次即可&#xff0c;对于session会话&#xff0c;用户在访问网页做会话保持…

Apache Ignite 2.8 引入的新指标系统(New Metrics System)的完整说明

这段文档是关于 Apache Ignite 2.8 引入的“新指标系统&#xff08;New Metrics System&#xff09;” 的完整说明。这是 Ignite 监控体系的一次重大升级&#xff0c;相比旧的、分散的统计方式&#xff0c;新系统更统一、灵活、可扩展。 我们来逐层拆解、通俗易懂地理解这个新…

【氮化镓】GaN同质外延p-i-n二极管中星形与三角形扩展表面缺陷的电子特性

2025年7月23日,美国国家标准与技术研究院(NIST)与美国海军研究实验室的Andrew J. Winchester等人在《Applied Physics Letters》期刊发表了题为《Electronic properties of extended surface defects in homoepitaxial GaN diodes》的文章,基于光电发射电子显微术、导电原子…

使用 Scrapy 框架定制爬虫中间件接入淘宝 API 采集商品数据

一、引言 在电商数据分析、市场调研等领域&#xff0c;获取淘宝平台上的商品数据是一项常见需求。淘宝提供了 API 接口&#xff0c;允许开发者通过授权的方式获取商品信息。本文将介绍如何使用 Scrapy 框架定制爬虫中间件&#xff0c;实现对淘宝 API 的接入&#xff0c;从而高…

Jmeter全局变量跨线程组的使用

一、线程组1中从数据库中查询到字段值二、BeanShell取样器中设置为全局变量#为什么说props.put("Out1",Out);其实是设置Out1为Jmeter的属性了呢&#xff1f; 因为在后面的调试取样器运行结果中&#xff0c;会发现如果只打开显示变量开关&#xff0c;是看不到Out1运行…

前端技术栈详解

前端技术栈是指构建现代Web应用程序所需的一系列技术和工具的集合。以下是当前主流前端技术栈的详细解析&#xff1a; 一、核心基础技术 1. HTML5 作用&#xff1a;网页内容的结构化标记关键特性&#xff1a; 语义化标签&#xff08;<header>, <section>, <arti…

Git Pull 时遇到 Apply 和 Abort 选项?详解它们的含义与应对策略

在使用 Git 进行团队协作时&#xff0c;git pull 是最常用的命令之一&#xff0c;用于拉取远程仓库的最新代码并合并到本地分支。但有时执行 git pull 后&#xff0c;Git 会提示 ​Apply&#xff08;应用&#xff09;​​ 和 ​Abort&#xff08;中止&#xff09;​​ 两个选项…

暑期算法训练.11

目录 47. 力扣203 移除链表元素 47.1 题目解析&#xff1a; ​编辑 47.2 算法思路&#xff1a; 47.3 代码演示&#xff1a; ​编辑 48. 力扣2.两数相加 48.1 题目解析&#xff1a; ​编辑 48.2 算法思路; 48.3 代码演示&#xff1a; 48.4 总结反思&#xff1a; …

nl2sql grpo强化学习训练,加大数据量和轮数后,准确率没提升,反而下降了,如何调整

在NL2SQL任务中使用GRPO强化学习训练时&#xff0c;增加数据量和训练轮数后准确率下降&#xff0c;通常是由过拟合、训练不稳定、奖励函数设计不合理、数据质量问题或探索-利用失衡等原因导致的。以下是具体的诊断思路和调整策略&#xff0c;帮助定位问题并优化性能&#xff1a…

PHP/Java/Python实现:如何有效防止恶意文件上传

文章目录 木马病毒防范:文件上传如何彻底防止伪造文件类型 引言 一、文件类型伪造的原理与危害 1.1 常见伪造手段 1.2 潜在危害 二、防御体系设计 2.1 防御架构 三、核心防御技术实现 3.1 服务端验证实现 3.1.1 文件内容检测(Python示例) 3.1.2 扩展名与内容双重验证(Java示…