《Git 简易速速上手小册》第2章:理解版本控制(2024 最新版)

news2024/11/15 23:23:21

在这里插入图片描述

文章目录

  • 2.1 本地仓库与版本历史
    • 2.1.1 基础知识讲解
    • 2.1.2 重点案例:回滚错误提交
    • 2.1.3 拓展案例 1:利用 `git bisect` 查找引入 bug 的提交
    • 2.1.4 拓展案例 2:合并提交历史
  • 2.2 远程仓库的使用
    • 2.2.1 基础知识讲解
    • 2.2.2 重点案例:在 GitHub 上协作
    • 2.2.3 拓展案例 1:处理合并冲突
    • 2.2.4 拓展案例 2:利用 Pull Request 进行代码审查
  • 2.3 版本回退与冲突解决
    • 2.3.1 基础知识讲解
    • 2.3.2 重点案例:修复一个破坏性的提交
    • 2.3.3 拓展案例 1:合并时解决冲突
    • 2.3.4 拓展案例 2:使用 `git rebase` 保持清洁的提交历史

2.1 本地仓库与版本历史

深入 Git 的世界,掌握本地仓库和版本历史的管理是每个开发者的必修课。本地仓库让你的项目历史和所有变更都在你的掌控之中,而版本历史则是你项目的时间线,记录了从初始提交到最新更改的每一个步骤。

2.1.1 基础知识讲解

  • 本地仓库:是你项目的心脏,存储着代码的所有版本。每次执行 git commit 命令,Git 都会将当前暂存区的快照作为一个新的提交保存到仓库中。
  • 版本历史:通过 git log 命令查看,它详细记录了每次提交的作者、日期和提交信息,让你可以追溯每一次更改的来龙去脉。
  • 查看更改git diff 命令允许你查看自上次提交以来你的代码发生了哪些更改,而 git show [commit] 可以查看特定提交的详细更改。

2.1.2 重点案例:回滚错误提交

假设你正在开发一个 Python 应用,你刚刚完成了一个新功能的开发,并且进行了提交。但突然间,你意识到这个提交引入了一个严重的错误。别担心,Git 能够帮你轻松回到错误发生之前。

# 查看提交历史,找到你想回到的那个提交的哈希值
git log
# 假设你想回到的提交哈希值是 abc1234
git checkout abc1234
# 创建一个新的分支来修复这个错误
git checkout -b fix-the-bug

在这个分支上,你可以放心地修复错误,而不会影响主分支。

2.1.3 拓展案例 1:利用 git bisect 查找引入 bug 的提交

当你面对一个神秘的 bug,而且不确定它是在哪个提交中被引入的时候,git bisect 可以成为你的侦探工具。通过在好的(没有 bug)和坏的(有 bug)提交之间进行二分查找,Git 可以帮助你快速定位问题的来源。

git bisect start
git bisect bad                 # 当前版本有 bug
git bisect good abc1234        # abc1234 版本是好的
# Git 会自动检出一半的提交供你测试,直到找到第一个引入 bug 的提交
git bisect reset               # 结束 bisect 会话

2.1.4 拓展案例 2:合并提交历史

如果你的提交历史变得杂乱无章,你可能想要通过合并一些提交来清理它。git rebase 是一个强大的工具,允许你修改、合并或者重新排序提交。

git rebase -i HEAD~5

这个命令会打开一个交互式界面,列出了最近的 5 次提交,你可以选择哪些提交需要被合并(squash)、重写(reword)或者重新排序。

通过这一章,你已经学会了如何有效地管理你的本地仓库和版本历史,以及如何在出现问题时优雅地恢复。记住,每个错误都是一个学习的机会,Git 则是你在这个过程中的最佳伙伴。现在,让我们继续前进,探索更多 Git 的奥秘吧!

在这里插入图片描述


2.2 远程仓库的使用

远程仓库,这个神奇的概念,让我们的代码不再孤单。它允许我们与世界分享我们的成果,同时也能从他人那里获得灵感和帮助。不论是 GitHub、GitLab 还是 Bitbucket,这些平台都成为了我们展示和协作项目的舞台。

2.2.1 基础知识讲解

  • 远程仓库的概念:远程仓库是位于互联网或网络上的仓库,可以通过 URL 访问。它让多个开发者能够共享一个项目并协同工作。
  • 添加远程仓库:使用 git remote add origin [URL] 命令,你可以添加一个新的远程仓库。origin 是远程仓库的默认名字,但你可以根据需要命名为其他。
  • 推送(Push)git push 命令让你能将本地的更改推送到远程仓库。这是分享你的更改给其他人的主要方式。
  • 拉取(Pull)git pull 命令用于从远程仓库获取最新的更改并合并到你的本地仓库。它是获取其他人更改的主要方式。

2.2.2 重点案例:在 GitHub 上协作

假设你正在与你的团队在 GitHub 上协作开发一个 Python 项目。项目的目标是创建一个简单的网页爬虫。

步骤 1:克隆远程仓库

首先,你需要将项目克隆到你的本地机器上:

git clone https://github.com/yourteam/python-web-crawler.git

这会在你的本地创建一个项目的副本,并自动添加远程仓库 origin 指向该 GitHub 仓库。

步骤 2:添加新功能

你决定添加一个新的功能:解析网页的标题。你在本地创建了一个新分支,开发了这个功能,并准备将它推送到 GitHub。

# parse_title.py
import requests
from bs4 import BeautifulSoup

def parse_title(url):
    response = requests.get(url)
    soup = BeautifulSoup(response.text, 'html.parser')
    return soup.title.text

步骤 3:推送更改

在完成新功能后,你提交了更改,并推送到 GitHub:

git checkout -b feature-parse-title
git add parse_title.py
git commit -m "Add function to parse webpage title"
git push origin feature-parse-title

2.2.3 拓展案例 1:处理合并冲突

在你的团队成员也在同时工作时,他们可能已经修改了项目中的某些文件,并推送了他们的更改到 GitHub。当你尝试合并你的分支到主分支时,可能会遇到合并冲突。

解决冲突需要你手动编辑文件,合并不同的更改,并再次提交:

git fetch origin
git rebase origin/main
# 解决任何冲突
git add .
git rebase --continue
git push origin feature-parse-title -f

2.2.4 拓展案例 2:利用 Pull Request 进行代码审查

GitHub 的 Pull Request(PR)功能是代码审查和项目协作的强大工具。通过创建 PR,你可以请求将你的分支合并到主分支。这个过程允许团队成员审查代码,提出建议,确保代码质量。

在你推送你的分支后,你可以在 GitHub 上对该分支创建一个新的 PR,并等待你的团队审查。

通过这些案例,我们看到了远程仓库如何成为团队协作不可或缺的一部分。无论是推送新的更改,处理合并冲突,还是通过 Pull Request 进行代码审查,远程仓库都让我们的开发流程更加流畅和高效。让我们继续利用这些工具,共同创造更多令人激动的项目吧!

在这里插入图片描述


2.3 版本回退与冲突解决

在软件开发的过程中,回退到之前的版本和解决代码冲突是常有的情况。Git 提供了强大的工具来帮助我们管理这些情况,让我们能够优雅地处理错误和协作中的矛盾。

2.3.1 基础知识讲解

  • 版本回退:如果你发现最近的一次提交有问题,你可以使用 git checkoutgit reset 命令回到之前的某个版本。git checkout [commit_hash] 用于查看历史中的某个版本,而 git reset 用于撤销一系列的提交。
  • 冲突解决:当多人同时修改了同一部分代码并尝试合并时,Git 会提示冲突。解决冲突需要手动编辑冲突的文件,选择要保留的更改,然后再次提交。

2.3.2 重点案例:修复一个破坏性的提交

假设在你的 Python 项目中,你不小心提交了一个包含严重错误的代码,这个错误甚至可能导致应用崩溃。你需要立刻修复这个问题,而不影响项目的其他部分。

步骤 1:定位错误提交

首先,使用 git log 定位到那个有问题的提交。假设提交的哈希是 abc123

步骤 2:回退更改

你决定使用 git revert 来回退这个更改,这将创建一个新的提交,撤销之前的更改,而不丢失之后的工作。

git revert abc123

现在,错误已经被安全地撤销,而且项目的其他部分保持不变。

2.3.3 拓展案例 1:合并时解决冲突

你和你的团队成员都对 utils.py 进行了修改,当你尝试合并他的分支时,遇到了冲突。

步骤 1:开始合并

git merge feature/teammate-branch

步骤 2:解决冲突

Git 会告诉你 utils.py 存在冲突。打开这个文件,你会看到类似下面的标记,显示了冲突的部分:

<<<<<<< HEAD
# 你的更改
=======
# 团队成员的更改
>>>>>>> feature/teammate-branch

手动编辑这个文件,解决冲突,然后保存。

步骤 3:完成合并

git add utils.py
git commit -m "Resolve merge conflict in utils.py"

2.3.4 拓展案例 2:使用 git rebase 保持清洁的提交历史

为了保持项目历史的清晰,你决定在将你的分支合并到 main 分支之前,先将你的分支上的更改进行变基操作,使其基于 main 分支的最新状态。

步骤 1:从 main 分支获取最新的更改

git checkout main
git pull

步骤 2:变基你的分支

git checkout feature/your-branch
git rebase main

如果在变基过程中遇到冲突,解决它们,然后使用 git rebase --continue 继续变基过程,直到完成。这样,你的分支上的更改就会出现在 main 分支更改的顶部,使得合并变得更简单、历史更清晰。

通过掌握版本回退和冲突解决的技巧,你就能更自信地处理项目中的错误和协作问题。记住,Git 提供了强大的工具来帮助我们优雅地管理这些挑战,让我们能够专注于创造伟大的软件。

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

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

相关文章

2024年龙年春节热点!过年期间想股票开户可以吗?怎么找到低佣金开户渠道?

股票投资技巧可以帮助投资者在股票市场中进行更明智的决策和更有效的操作。以下是一些常见的股票投资技巧&#xff1a; 研究和分析&#xff1a;在购买股票之前&#xff0c;投资者应该进行充分的研究和分析。这包括了解公司的基本面&#xff0c;如财务状况、业务模式和竞争优势等…

modelsim仿真使用到vivado的IP,该如何使用!

modelsim仿真时&#xff0c;如果使用到了vivado的IP就会报错&#xff0c;本次就告诉大家如何将vivado的IP添加到modelsim中直接仿真。 一、生成ini文件以及IP打包 打开vivado&#xff0c;点击上方的Tools-->Compile Simulation Libraries得到如下界面 simulator&#xff1…

【Linux】基于管道进行进程间通信

进程间通信 一、初识进程间通信1. 进程间通信概念2. 进程间通信分类 二、管道1. 管道概念2. 管道原理3. 匿名管道4. 匿名管道系统接口5. 管道的特性和情况6. 匿名管道的应用&#xff08;1&#xff09;命令行&#xff08;2&#xff09;进程池 7. 命名管道&#xff08;1&#xff…

机器人运动学林沛群——变换矩阵

对于仅有移动&#xff0c;由上图可知&#xff1a; A P B P A P B o r g ^AP^BP^AP_{B org} APBPAPBorg​ 对于仅有转动&#xff0c;可得&#xff1a; A P B A R B P ^AP^A_BR^BP APBA​RBP 将转动与移动混合后&#xff0c;可得&#xff1a; 一个例子 在向量中&#xff…

电力负荷预测 | 电力系统负荷预测模型(Python线性回归、随机森林、支持向量机、BP神经网络、GRU、LSTM)

文章目录 效果一览文章概述源码设计参考资料效果一览 文章概述 电力系统负荷预测模型(Python线性回归、随机森林、支持向量机、BP神经网络、GRU、LSTM) 所谓预测,就是指通过对事物进行分析及研究,并运用合理的方法探索事物的发展变化规律,对其未来发展做出预先估计和判断。…

Linux系统调试课:CPU 利用率中softirq飙高情况分析

文章目录 <font color=#0990d9>一、细化 CPU 利用率监控<font color=#0990d9>二、softirq飙高观测<font color=#0990d9>三、ksoftirqd机制沉淀、分享、成长,让自己和他人都能有所收获!😄 CPU 利用率是一个很笼统的概念,在遇到 CPU 利用率飙高的问题时,…

Spring Boot的打包方式:JAR vs. WAR 打包方式

Spring Boot的打包方式&#xff1a;JAR vs. WAR 打包方式 Spring Boot是一个流行的Java开发框架&#xff0c;提供了快速、便捷的应用程序开发和部署方式。本文将介绍Spring Boot的两种常见打包方式&#xff1a;JAR和WAR。我们将深入探讨它们的特点、适用场景和部署方式&#xf…

BUGKU-WEB 留言板

题目描述 题目无需登录后台&#xff01;需要xss平台接收flag&#xff0c; http协议需要http协议的xss平台打开场景后界面如下&#xff1a; 解题思路 看到此类的题目&#xff0c;应该和存储型xss有关&#xff0c;也就是将恶意代码保存到服务器端即然在服务器端&#xff0c;那就…

Linux操作系统基础(一):操作系统概述

文章目录 操作系统概述 一、计算机分类 二、计算机组成 三、操作系统概述 四、操作系统分类 操作系统概述 一、计算机分类 计算机一般分为个人计算机&#xff08;笔记、台式机&#xff09;与 企业级服务器&#xff08;1U、2U、机柜、塔式、刀片&#xff09;两种形式。 二…

初识C语言·预处理详解

目录 1 预定义符号 2 define定义常量 3 #define定义宏 4 带有副作用的宏 5 宏替换的规则 6 宏和函数的对比 7 # 和 ## i) #运算符 ii) ##运算符 8 命名约定 9 命令行定义 10 条件编译 条件编译1&#xff1a; 条件编译2&#xff1a; 条件编译3&#xff1a; 条件…

Vue源码系列讲解——变化侦测篇【下】(Array的变化侦测)

目录 1. 前言 2. 在哪里收集依赖 3. 使Array型数据可观测 3.1 思路分析 3.2 数组方法拦截器 3.3 使用拦截器 4. 再谈依赖收集 4.1 把依赖收集到哪里 4.2 如何收集依赖 4.3 如何通知依赖 5. 深度侦测 6. 数组新增元素的侦测 7. 不足之处 8. 总结 1. 前言 上一篇文…

gh0st远程控制——客户端界面编写(三)

◉ 主控端界面添加右键弹出菜单的功能 为Onlie_List区域添加右键弹出菜单项的功能&#xff1a; 3个视图&#xff1a;类视图、解决方案视图、资源视图 在资源视图下添加一个Menu&#xff1a; 更改Menu的ID为IDR_MENU_ONLINE&#xff1a; 为各控件添加便于区分的ID&#xff1a…

SERVLET线程模型

1. SERVLET线程模型 Servlet规范定义了两种线程模型来阐明Web容器应该如何在多线程环境中处理servlet。第一种模型称为多线程模型,默认在此模型内执行所有servlet。在此模型中,每次客户机向servlet发送请求时Web容器都启动一个新线程。这意味着可能有多个线程同时访问servle…

【高阶数据结构】B-树详解

文章目录 1. 常见的搜索结构2. 问题提出使用平衡二叉树搜索树的缺陷使用哈希表的缺陷 3. B-树的概念4. B-树的插入分析插入过程分析插入过程总结 5. B-树的代码实现5.1 B-树的结点设计5.2 B-树的查找5.3 B-树的插入实现InsertKey插入和分裂测试 6. B-树的删除&#xff08;思想&…

机器人工具箱学习(一)

一、机器人工具箱介绍 机器人工具箱是由来自昆士兰科技大学的教授Peter Corke开发的&#xff0c;被广泛用于机器人进行仿真&#xff08;主要是串联机器人&#xff09;。该工具箱支持机器人一些基本算法的功能&#xff0c;例如三维坐标中的方向表示&#xff0c;运动学、动力学模…

软件定义网络 SDN 简介、OpenFlow

目录 软件定义网络 SDN 简介 1 SDN 与 协议 OpenFlow 1.1 SDN 1.2 OpenFlow 1.2.1 协议 OpenFlow 1.2.2 OpenFlow 数据层面 &#xff08;1&#xff09;匹配 动作 &#xff08;2&#xff09;流表 1.流表由远程控制器管理 2.流表结构 2 SDN 体系结构 3 SDN 控制器 软…

Matplotlib雷达图教程:学会绘制炫酷多彩的多维数据可视化【第53篇—python:Seaborn大全】

文章目录 Matplotlib雷达图绘制指南&#xff1a;炫酷雷达图参数解析与实战1. 普通雷达图2. 堆叠雷达图3. 多个雷达图4. 矩阵雷达图5. 极坐标雷达图6. 定制化雷达图外观7. 调整雷达图坐标轴范围8. 雷达图的子图布局9. 导出雷达图总结 Matplotlib雷达图绘制指南&#xff1a;炫酷雷…

D7 Elasticsearch-Mongodb(搜索记录)

我是南城余&#xff01;阿里云开发者平台专家博士证书获得者&#xff01; 欢迎关注我的博客&#xff01;一同成长&#xff01; 一名从事运维开发的worker&#xff0c;记录分享学习。 专注于AI&#xff0c;运维开发&#xff0c;windows Linux 系统领域的分享&#xff01; 知…

Vue3 之 Pinia

什么是Pinia Pinia是一个Vue的专属的最新状态管理库&#xff0c;是vuex状态管理工具的替代品 Pinia的优势 1.提供更加简单的API&#xff08;去掉了 mutation&#xff09; 2.提供符合组合式风格的API&#xff08;和vue3语法统一&#xff09; 3.去掉了modules的概念&#xff0…

推荐一款开源的跨平台划词翻译和OCR翻译软件:Pot

Pot简介 一款开源的跨平台划词翻译和OCR翻译软件 下载安装指南 根据你的机器型号下载对应版本&#xff0c;下载完成后双击安装即可。 使用教程 Pot具体功能如下&#xff1a; 划词翻译输入翻译外部调用鼠标选中需要翻译的文本&#xff0c;按下设置的划词翻译快捷键即可按下输…