《Git 简易速速上手小册》第1章:Git 基础(2024 最新版)
文章目录
- 1.1 Git 简介:版本控制的演变
- 1.1.1 基础知识讲解
- 1.1.2 重点案例:协作开发流程优化
- 案例:功能开发与分支策略
- 1.1.3 拓展案例 1:代码审查与合并
- 1.1.4 拓展案例 2:冲突解决
- 1.2 安装和配置 Git:首次设置
- 1.2.1 基础知识讲解
- 1.2.2 重点案例:在 Python 项目中初始化 Git 仓库
- 1.2.3 拓展案例 1:配置忽略文件 `.gitignore`
- 1.2.4 拓展案例 2:克隆远程仓库并进行初次推送
- 1.3 基本命令:Add、Commit、Push
- 1.3.1 基础知识讲解
- 1.3.2 重点案例:为 Python 项目贡献代码
- 1.3.3 拓展案例 1:使用 `.gitignore`
- 1.3.4 拓展案例 2:解决冲突后推送
1.1 Git 简介:版本控制的演变
在软件开发的浩瀚宇宙中,版本控制系统(VCS)守护着每一行代码的安全。从最初的本地 VCS,如 RCS,到集中式 VCS,比如 SVN,再到分布式版本控制系统,如 Git,版本控制的演变反映了开发工作流程的不断进化和对协作支持的增强。
Git,作为一个开源的分布式版本控制系统,由 Linus Torvalds 在 2005 年创立,旨在提高代码的管理效率,支持非线性开发流程,并确保代码的完整性和历史记录的追溯性。Git 的设计哲学是以速度、简单的设计和对分布式非线性工作流的强大支持为核心。
1.1.1 基础知识讲解
在深入案例之前,让我们先回顾几个 Git 的重点基础知识:
- 工作区、暂存区和仓库:工作区是你编辑工作的地方,暂存区(Index)是一个临时保存改动的地方,仓库则保存了项目的历史记录和版本信息。
- 基本命令:
git init
初始化新仓库,git add
将改动添加到暂存区,git commit
将暂存区内容添加到仓库中,git push
将本地的更改推送到远程仓库。 - 分支管理:Git 的分支管理让开发者能在不同的功能、实验或修复上独立工作,然后通过
git merge
或git rebase
合并回主分支。
1.1.2 重点案例:协作开发流程优化
假设你是一个 Python 开发团队的一员,团队正在开发一个 Web 应用。你们决定使用 Git 来协作和管理代码。首先,每个开发者都需要在本地机器上配置 Git,并克隆项目仓库:
git clone https://github.com/yourproject/webapp.git
案例:功能开发与分支策略
你负责开发一个新的 REST API 接口。为了不干扰主分支(通常称为 master
或 main
),你创建了一个新分支:
git checkout -b feature/new-rest-api
在这个分支上,你开发了新的 Python 代码来实现接口功能,并使用 Git 来管理这些更改:
# 新功能的 Python 代码
def new_rest_api():return "Hello, World!"
完成开发后,你将更改添加到暂存区并提交到你的分支:
git add .
git commit -m "Add new REST API interface"
然后,将你的分支推送到远程仓库,并在仓库的 Web 界面上创建一个 Pull Request(PR),请求将你的分支合并到主分支。
1.1.3 拓展案例 1:代码审查与合并
团队成员在 PR 上进行代码审查,提出建议或批准更改。这个过程提高了代码质量并促进了团队协作。一旦 PR 获得批准,你的代码就可以合并到主分支了。
1.1.4 拓展案例 2:冲突解决
在合并过程中,可能会遇到代码冲突。假设另一个开发者也修改了同一个文件的同一部分,Git 无法自动合并。这时,你需要手动解决这些冲突,更新代码,并再次提交:
# 解决冲突后
git add .
git commit -m "Resolve merge conflict"
git push origin feature/new-rest-api
通过这些案例,我们看到了 Git 在实际生产中如何促进团队的高效协作,提高开发流程的灵活性和响应速度。Git 不仅仅是一个工具,它改变了我们编写、协作和发布软件的方式。
1.2 安装和配置 Git:首次设置
欢迎来到 Git 的世界!在这里,每个人都可以像时间旅行者一样自由地穿梭于代码的历史之中。但在开始旅行之前,我们需要先建立一个时光机——也就是安装和配置 Git。这个过程既是简单又是必要的,让我们从基础知识开始,逐步深入。
1.2.1 基础知识讲解
- 安装 Git:Git 可以在 Linux、MacOS 和 Windows 上安装。大多数 Linux 发行版已经预装了 Git,而 MacOS 和 Windows 用户可以从 Git 官网下载安装程序。
- 配置用户信息:安装 Git 后,首先需要设置你的用户名称和电子邮件地址。这是因为 Git 的每次提交都会使用这些信息,它们会被永久记录在你的提交历史中。
git config --global user.name "Your Name"
git config --global user.email "your_email@example.com"
- 检查配置信息:配置完成后,你可以通过以下命令检查你的配置信息:
git config --list
1.2.2 重点案例:在 Python 项目中初始化 Git 仓库
假设你正在开始一个新的 Python 项目,项目目录名为 python_project
。在这个目录下,你想使用 Git 来管理项目的版本控制。
步骤 1:初始化仓库
首先,打开终端或命令行界面,切换到你的项目目录:
cd /path/to/python_project
然后,使用以下命令初始化一个新的 Git 仓库:
git init
这个命令会创建一个名为 .git
的隐藏目录,其中包含了仓库的所有元数据。
步骤 2:添加文件到仓库
创建一个名为 main.py
的 Python 文件,内容如下:
print("Hello, Git!")
使用 git add
命令将文件添加到暂存区:
git add main.py
步骤 3:提交更改
提交你的更改到仓库,包括一条有意义的提交信息:
git commit -m "Initial commit with main.py"
恭喜,你已经成功在你的 Python 项目中使用 Git 进行了第一次提交!
1.2.3 拓展案例 1:配置忽略文件 .gitignore
在实际开发中,有些文件不应该被加入到版本控制中,例如 Python 的 __pycache__
目录或者 IDE 配置文件。你可以创建一个名为 .gitignore
的文件,在其中列出所有你想要 Git 忽略的文件和目录:
__pycache__/
*.pyc
.idea/
.vscode/
1.2.4 拓展案例 2:克隆远程仓库并进行初次推送
当你加入一个团队项目,或者想要在 GitHub 上贡献代码时,通常需要从远程仓库克隆一个副本。假设你要贡献到一个开源的 Python 项目:
git clone https://github.com/opensource_project/python_project.git
克隆完成后,你可以在本地进行开发,然后将你的贡献推送回远程仓库。
这些案例展示了 Git 在 Python 项目开发中的实用性和必要性,从项目初始化到日常的版本控制流程,Git 都是每位 Python 开发者工具箱中不可或缺的工具。
1.3 基本命令:Add、Commit、Push
欢迎来到 Git 的三大神器:add
、commit
、push
。这三个命令构成了 Git 工作流的核心,让你的代码历程变得有迹可循。掌握它们,就像掌握了魔法,可以让你的代码安全地保存并与世界共享。
1.3.1 基础知识讲解
git add
:这个命令可以将你的文件更改添加到暂存区(也称为“索引”),准备下一次提交。如果你有多个文件,可以一次性添加多个文件到暂存区,或者使用git add .
添加当前目录下的所有更改。git commit
:提交命令会将暂存区的更改记录到 Git 仓库中。每次提交都需要一个消息,这个消息应该清晰地描述这次提交做了什么更改,这有助于未来的你或其他开发者理解这次更改的目的。git push
:将你的本地提交推送到远程仓库。如果你是和团队一起工作在同一个项目上,这个命令让团队的其他成员看到你的最新更改。
1.3.2 重点案例:为 Python 项目贡献代码
假设你在 GitHub 上找到了一个开源的 Python 项目,你发现了一个可以改进的地方,并决定贡献你的代码。
步骤 1:克隆仓库
首先,克隆远程仓库到你的本地机器:
git clone https://github.com/opensource_project/python_project.git
步骤 2:创建新分支
为了保持主分支的稳定性,最好在一个新的分支上工作:
git checkout -b improve-feature
步骤 3:进行更改并提交
你为 app.py
添加了一些新功能,现在是时候使用 add
、commit
命令了:
git add app.py
git commit -m "Add new functionality to app.py"
步骤 4:推送更改
将你的分支推送到 GitHub:
git push origin improve-feature
最后,在 GitHub 上对该分支发起 Pull Request。
1.3.3 拓展案例 1:使用 .gitignore
在你的 Python 项目中,可能会生成一些不需要追踪的文件,比如 __pycache__
或者一些日志文件。创建一个 .gitignore
文件来告诉 Git 忽略这些文件:
__pycache__/
*.log
这样,当你使用 git add .
命令时,这些文件就不会被添加到暂存区。
1.3.4 拓展案例 2:解决冲突后推送
当你和团队成员同时修改了同一部分代码并尝试推送时,可能会遇到冲突。首先,拉取最新的远程分支更改:
git pull origin main
如果有冲突,Git 会提示你解决。解决冲突后,再次提交并推送你的更改:
git add .
git commit -m "Resolve merge conflict"
git push origin improve-feature
这些案例展示了如何在实际的 Python 项目中应用 add
、commit
、push
等 Git 命令,无论是个人项目还是团队协作,这些基本操作都是你日常工作流中不可或缺的部分。掌握了它们,就等于拥有了让代码历程井井有条的魔法棒。
相关文章:

《Git 简易速速上手小册》第1章:Git 基础(2024 最新版)
文章目录 1.1 Git 简介:版本控制的演变1.1.1 基础知识讲解1.1.2 重点案例:协作开发流程优化案例:功能开发与分支策略 1.1.3 拓展案例 1:代码审查与合并1.1.4 拓展案例 2:冲突解决 1.2 安装和配置 Git:首次设…...
交易中的胜率和盈亏比估算
交易中的胜率和盈亏比估算 1.定义 胜率是指交易者在一定时间内成功交易的次数占总交易次数的比例。例如,如果交易者在10次交易中成功了6次,那么他的胜率就是60%。 盈亏比是指交易者每笔成功交易的盈利与每笔失败交易的亏损之间的比例。例如࿰…...
mysql RR、RC隔离级别实现原理
事务隔离级别实现过程 快照读(select语句) 获取事务自己版本号,即事务 ID获取 Read View 查询得到数据,然后 Read View 中事务版本号进行比较。如果不符合 Read View 可见性规则(看最新数据还是副本里的数据…...

c语言--指针数组(详解)
目录 一、什么是指针数组?二、指针数组模拟二维数组 一、什么是指针数组? 指针数组是指针还是数组? 我们类比一下,整型数组,是存放整型的数组,字符数组是存放字符的数组。 那指针数组呢?是存放…...
Elasticsearch单个索引数据量过大的优化
当Elasticsearch(ES)中的单个索引(index)的数据量变得过大时,可能会遇到性能下降、查询缓慢、管理困难等问题。为了优化和应对大索引的挑战,可以考虑以下策略: 1. 使用分片和副本 分片…...

Java安全 CC链1分析(Lazymap类)
Java安全 CC链1分析 前言CC链分析CC链1核心LazyMap类AnnotationInvocationHandler类 完整exp: 前言 在看这篇文章前,可以看下我的上一篇文章,了解下cc链1的核心与环境配置 Java安全 CC链1分析 前面我们已经讲过了CC链1的核心ChainedTransf…...

【lesson51】信号之信号处理
文章目录 信号处理可重入函数volatileSIGCHLD信号 信号处理 信号产生之后,信号可能无法被立即处理,一般在合适的时候处理。 1.在合适的时候处理(是什么时候?) 信号相关的数据字段都是在进程PCB内部。 而进程工作的状态…...

分享springboot框架的一个开源的本地开发部署教程(若依开源项目开发部署过程分享持续更新二开宝藏项目MySQL数据库版)
1首先介绍下若依项目: 若依是一个基于Spring Boot和Spring Cloud技术栈开发的多租户权限管理系统。该开源项目提供了一套完整的权限管理解决方案,包括用户管理、角色管理、菜单管理、部门管理、岗位管理等功能。 若依项目采用前后端分离的架构…...

leetcode:131.分割回文串
树形结构: 切割到字符串的尾部,就是叶子节点。 回溯算法三部曲: 1.递归的参数和返回值: 参数字符串s和startIndex切割线 2.确定终止条件: 当分割线到字符串末尾时到叶子节点,一种方案出现 3.单层搜索…...
Linux下的json-c
一、json-c库的安装(ubuntu) root用户运行以下命令: apt-get install libjson0-dev libjson0非root用户运行以下命令: sudo apt-get install libjson0-dev libjson0二、解析json数据 1. json_object json_object是JSON-C库中定义的一个结构体&#…...

[C#] 如何使用ScottPlot.WPF在WPF桌面程序中绘制图表
什么是ScottPlot.WPF? ScottPlot.WPF 是一个开源的数据可视化库,用于在 WPF 应用程序中创建高品质的绘图和图表。它是基于 ScottPlot 库的 WPF 版本,提供了简单易用的 API,使开发人员能够通过简单的代码创建各种类型的图表&#…...

如何修复Mac的“ kernel_task” CPU使用率过高的Bug?
当计算机开始缓慢运行时,这从来都不是一件有趣的事情,但是当您弄不清它为何如此缓慢时,甚至会变得更糟。如果您已经关闭了所有程序,并且Mac上的所有内容仍然感觉像是在糖蜜中移动,这可能是令人讨厌的kernel_task导致高…...

【NodeJS】006- API模块与会话控制介绍d
1.简介 1.1 接口是什么 接口是 前后端通信的桥梁 简单理解:一个接口就是 服务中的一个路由规则 ,根据请求响应结果 接口的英文单词是 API (Application Program Interface),所以有时也称之为 API 接口 这里的接口指的是『数据接口』&#…...

[UI5 常用控件] 08.Wizard,NavContainer
文章目录 前言1. Wizard1.1 基本结构1.2 属性1.2.1 Wizard:complete1.2.2 Wizard:finishButtonText1.2.3 Wizard:currentStep1.2.4 Wizard:backgroundDesign1.2.5 Wizard:enableBranching1.2.6 WizardStep:…...

EasyExcel分页上传数据
EasyExcel分页上传数据 一、实例 controller上传入口 PostMapping("/upload")ResponseBodyLog(title "导入工单", businessType BusinessType.IMPORT)public AjaxResult uploadFile(HttpServletRequest request, MultipartFile files) throws Exceptio…...

Spring Native 解放 JVM
一、Spring Native 是什么 Spring Native可以通过GraalVM将Spring应用程序编译成原生镜像,提供了一种新的方式来部署Spring应用。与Java虚拟机相比,原生镜像可以在许多场景下降低工作负载,包括微服务,函数式服务,非常…...
汇编的两道题
1.编写一个在显示器上显示一个笑脸字符的程序 看这段程序的结构,可以看出,每个代码段,带有segment的必须用ASSUME 来进行段分配。 PROG1 SEGMENT;PROG1段的开始ASSUME CS:PROG1;PROG1(自己命名的,叫啥都可以ÿ…...

Seurat - 聚类教程 (1)
设置 Seurat 对象 在本教程[1]中,我们将分析 10X Genomics 免费提供的外周血单核细胞 (PBMC) 数据集。在 Illumina NextSeq 500 上对 2,700 个单细胞进行了测序。可以在此处[2]找到原始数据。 我们首先读取数据。 Read10X() 函数从 10X 读取 cellranger 管道的输出&…...

Mac 版 Excel 和 Windows 版 Excel的区别
Excel是一款由微软公司开发的电子表格程序,广泛应用于数据处理、分析和可视化等领域。它提供了丰富的功能和工具,包括公式、函数、图表和数据透视表等,帮助用户高效地处理和管理大量数据。同时,Excel还支持与其他Office应用程序的…...

【报错解决】-bash: export: `-8‘: not a valid identifier 不是有效的标识符
现象 一登陆就提示-bash: export: -8’: not a valid identifier 不是有效的标识符 问题出现的原因 设置字符集时多写了空格 [rootdb1 ~]# cat >>/etc/profile<<EOF export LANGen_US.UTF -8(-8前不应有空格) EOF 解决方法 cd /etc vi profile 把export带有-8的…...

XML Group端口详解
在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型
摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...

循环冗余码校验CRC码 算法步骤+详细实例计算
通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)࿰…...

如何在看板中体现优先级变化
在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...
在四层代理中还原真实客户端ngx_stream_realip_module
一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡(如 HAProxy、AWS NLB、阿里 SLB)发起上游连接时,将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后,ngx_stream_realip_module 从中提取原始信息…...

Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级
在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...
什么是EULA和DPA
文章目录 EULA(End User License Agreement)DPA(Data Protection Agreement)一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA(End User License Agreement) 定义: EULA即…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...

保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek
文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama(有网络的电脑)2.2.3 安装Ollama(无网络的电脑)2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...
Python Einops库:深度学习中的张量操作革命
Einops(爱因斯坦操作库)就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库,用类似自然语言的表达式替代了晦涩的API调用,彻底改变了深度学习工程…...