《Git 简易速速上手小册》第1章:Git 基础(2024 最新版)

news2024/9/20 16:41:25

在这里插入图片描述

文章目录

  • 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 mergegit rebase 合并回主分支。

1.1.2 重点案例:协作开发流程优化

假设你是一个 Python 开发团队的一员,团队正在开发一个 Web 应用。你们决定使用 Git 来协作和管理代码。首先,每个开发者都需要在本地机器上配置 Git,并克隆项目仓库:

git clone https://github.com/yourproject/webapp.git

案例:功能开发与分支策略

你负责开发一个新的 REST API 接口。为了不干扰主分支(通常称为 mastermain),你创建了一个新分支:

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 的三大神器:addcommitpush。这三个命令构成了 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 添加了一些新功能,现在是时候使用 addcommit 命令了:

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 项目中应用 addcommitpush 等 Git 命令,无论是个人项目还是团队协作,这些基本操作都是你日常工作流中不可或缺的部分。掌握了它们,就等于拥有了让代码历程井井有条的魔法棒。

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

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

相关文章

一文搞懂MOS管!

MOS管 1.原理 金属-氧化物半导体场效应晶体管 G:gate 栅极;S:source 源极;D:drain 漏极 P沟道型和N沟道型管(箭头指向G极的是N沟道) 增强型管:栅极-源极电压 Vgs 为零时Ids电流…

JavaScript基础第三天

JavaScript 基础第三天 今天我们学习for循环、while循环、终止循环和无限循环。 1. for 循环 1.1. 语法 // 1. 语法格式 // for(起始值; 结束条件; 累加器) { // // 要重复执行的代码 // }1.2. 示例代码 let sum 0; for (let i 0; i < 100; i) {sum i; } alert(&q…

Facebook的数字安全使命:社交平台的责任

在数字化的时代&#xff0c;社交媒体已经成为人们生活不可或缺的一部分&#xff0c;而数字安全问题也随之成为社交平台亟待解决的挑战。作为全球最大的社交媒体平台之一&#xff0c;Facebook不仅肩负着连接世界的使命&#xff0c;更担负着保障用户数字安全的责任。本文将深入研…

基于 SpringBoot 和 Vue.js 的权限管理系统部署教程

大家后&#xff0c;我是 jonssonyan 在上一篇文章我介绍了我的新项目——基于 SpringBoot 和 Vue.js 的权限管理系统&#xff0c;本文主要介绍该系统的部署 部署教程 这里使用 Docker 进行部署&#xff0c;Docker 基于容器技术&#xff0c;它可以占用更少的资源&#xff0c;…

Prompt Engineering实战-构建“哄哄模拟器”

目录 一 背景 二 “哄哄模拟器”的Prompt Prompt 的典型构成 三 操作步骤 3.1 创建对话 3.2 游戏测试 一 背景 前几天《AI 大模型全栈工程师》第二节课讲了“Prompt Engineering&#xff0c;提示工程”&#xff0c;里面提到一些prompt相关的技巧&#xff0c;原则&#xf…

书客、孩视宝、松下大路灯怎么选?耗费30天对比揭秘热门大路灯!

现如今&#xff0c;随着人们的生活水平在不断提高&#xff0c;科技人才以及学生人群的压力也越来越大&#xff0c;长时间的工作和学习&#xff0c;眼睛也面临着巨大的压力&#xff0c;导致一系列眼睛疲劳、酸痛、视力下降的情况发生&#xff0c;这时用眼必备的照明神器——大路…

《Java程序设计》实验报告(三)之常用类和集合类

实验内容及步骤&#xff1a; 编写String类的程序。&#xff08;1&#xff09;代码&#xff1a; public class TeatString3 { public static void main(String[] args) { String str"abcd"; System.out.print("将字符串转换为字符数组后…

web 前端实现一个根据域名的判断 来显示不同的logo 和不同的标题

1.需求 有可能我做一个后台 web端 我想实现一套代码的逻辑 显示不同的公司主题logo以及内容&#xff0c;但是实际上 业务逻辑一样 2.实现 建一个store oem.ts 这个名为是 oem系统 oem.ts import { defineStore } from pinia;import { store } from /store;const oemDataLis…

[每周一更]-(第85期):NLP-实战操作-文本分类

NLP文本分类的应用场景 医疗领域 - 病历自动摘要&#xff1a; 应用&#xff1a; 利用NLP技术从医疗文档中自动生成病历摘要&#xff0c;以帮助医生更快速地了解患者的状况。 法律领域 - 法律文件分类&#xff1a; 应用&#xff1a; 使用文本分类技术自动分类法律文件&#xf…

开源软件:引领技术创新、商业模式与安全的融合

序 在信息技术日新月异的今天&#xff0c;开源软件以其独特的魅力和影响力&#xff0c;正逐渐成为软件产业的新常态。开源软件的低成本、高度可协作性和透明度等特点&#xff0c;不仅吸引了无数企业和个人用户的青睐&#xff0c;更为软件行业带来了前所未有的繁荣景象。 一、…

elementPlus实现动态表格单元格合并span-method方法总结

最近在做PC端需求的时候&#xff0c;需要把首列中相邻的同名称单元格合并。 我看了一下elementPlus官网中的table表格&#xff0c;span-method可以实现单元格合并。 我们先看一下官网的例子&#xff1a; 合并行或列 多行或多列共用一个数据时&#xff0c;可以合并行或列。 …

远程手机搭建Termux环境,并通过ssh连接Termux

背景 Termux只能通过鼠标点击&#xff0c;无法使用电脑键盘&#xff0c;输入速度很慢&#xff0c;你想通过ssh 连接Termux&#xff0c;获得友好体验搞了个云手机&#xff0c;想像普通手机那样充当服务器想把自己的手机公开到局域网中供同事调试想把自己的模拟器公开到局域网中…

51 -25 Scene as Occupancy 3D占用作为场景表示 论文精读

本文阅读的文章是Scene as Occupancy&#xff0c;介绍了一种将物体表示为3D occupancy的新方法&#xff0c;以描述三维场景&#xff0c;并用于检测、分割和规划。 文章提出了OccNet和OpenOcc两个核心概念。 OccNet 3D占用网络是一种以多视图视觉为中心的方法&#xff0c;通过…

ArcGIS的UTM与高斯-克吕格投影分带要点总结

UTM&#xff08;通用横轴墨卡托投影、等角横轴割椭圆柱投影&#xff09;投影分带投影要点&#xff1a; 1&#xff09;UTM投影采用6度分带 2&#xff09;可根据公式计算&#xff0c;带数&#xff08;经度整数位/6&#xff09;的整数部分31 3&#xff09;北半球地区&#xff0…

《PCI Express体系结构导读》随记 —— 第II篇 第4章 PCIe总线概述(9)

接前一篇文章&#xff1a;《PCI Express体系结构导读》随记 —— 第II篇 第4章 PCIe总线概述&#xff08;8&#xff09; 4.2 PCIe体系结构的组成部件 PCIe总线作为处理器系统的局部总线&#xff0c;其作用与PCI总线类似&#xff0c;主要目的是为了连接处理器系统中的外部设备&…

【iOS分类、关联对象】如何使用关联对象给分类实现一个weak的属性

如何使用关联对象给分类实现一个weak的属性 通过关联对象objc_setAssociatedObject中的策略policy可知&#xff0c;并不支持使用weak修饰对象属性&#xff1a; typedef OBJC_ENUM(uintptr_t, objc_AssociationPolicy) {OBJC_ASSOCIATION_ASSIGN 0, //assignOBJC_ASSOCIATION…

Java基于微信小程序的医院挂号系统

文章目录 1 简介2 技术栈3 系统目标3.2 系统功能需求分析3.2.1 功能需求分析 4 系统模块设计4.1 数据库模块设计 5 系统的实现5.1 微信小程序个人中心5.2 科**室内容查看的实现**5.3 预约挂号的实现5.4 后台管理界面实现5.5 医生预约管理5.6 医生信息管理 参考文献7 推荐阅读8 …

Cocos creator 3.x 刚体组件碰撞无效

Cocos creator 3.x 刚体组件碰撞无效 问题描述&#xff1a;只有一个circleCollider2D时&#xff0c;可以在碰撞时正确输出结果&#xff0c;但是当我在外围加了一个circle之后&#xff0c;期望character进入圆圈范围时就触发方法&#xff0c;此时原代码失效 import { _decorat…

java SpringBoot2.7整合Elasticsearch(ES)7 进行文档增删查改

首先 我们在 ES中加一个 books 索引 且带有IK分词器的索引 首先 pom.xml导入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId> </dependency>applicatio…

Asp .Net Core 集成 NLog

简介 NLog是一个基于.NET平台编写的日志记录类库&#xff0c;它可以在应用程序中添加跟踪调试代码&#xff0c;以便在开发、测试和生产环境中对程序进行监控和故障排除。NLog具有简单、灵活和易于配置的特点&#xff0c;支持在任何一种.NET语言中输出带有上下文的调试诊断信息…