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

在这里插入图片描述

文章目录

  • 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 BeautifulSoupdef 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.mzph.cn/news/670878.shtml

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

相关文章

通过Harbor构建docker私服仓库

Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器&#xff0c;它扩展了开源的Docker Distribution&#xff0c;通过添加一些企业必需的功能特性&#xff0c;如安全、标识和管理等。Harbor由VMware公司开发并开源&#xff0c;旨在帮助用户迅速搭建一个企业级的Docke…

点云transformer算法: FlatFormer 论文阅读笔记

代码&#xff1a;https://github.com/mit-han-lab/flatformer论文&#xff1a;https://arxiv.org/abs/2301.08739[FlatFormer.pdf] Flatformer是对点云检测中的 backbone3d部分的改进工作&#xff0c;主要在探究怎么高效的对点云应用transformer 具体的工作如下&#xff1a;一…

PostgreSQL的wal文件回收问题

引子 将PostgreSQL的GUC参数wal_recycle设置为on&#xff0c;然后对数据库执行一定业务量的操作&#xff0c;会发现在pg_wal目录下&#xff0c;有很多未来使用的wal文件&#xff0c;且创建时间比现在正在使用的wal文件更早&#xff0c;下文将描述和分析这种情况。 问题描述 …

springboot160社区智慧养老监护管理平台设计与实现

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的 适用于计算机类毕业设计&#xff0c;课程设计参考与学习用途。仅供学习参考&#xff0c; 不得用于商业或者非法用途&#xff0c;否则&#xff0c;一切后果请用户自负。 看运行截图看 第五章 第四章 获取资料方式 **项…

【数据分享】1929-2023年全球站点的逐年平均能见度(Shp\Excel\免费获取)

气象数据是在各项研究中都经常使用的数据&#xff0c;气象指标包括气温、风速、降水、能见度等指标&#xff0c;说到气象数据&#xff0c;最详细的气象数据是具体到气象监测站点的数据&#xff01; 之前我们分享过1929-2023年全球气象站点的逐年平均气温数据、逐年最高气温数据…

在django中集成markdown文本框

首先需要下载开源组件&#xff1a;http://editor.md.ipandao.com/&#xff0c;可能需要挂梯子。 百度网盘&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1D9o3P8EQDqSqfhAw10kYkw 提取码&#xff1a;eric 1.在html代码中生成一个div&#xff0c;ideditor <div c…

Oracle数据表ID自增操作

一、Oracle ID自增长功能介绍 Oracle数据库默认不支持像 SQLServer、MySQL中的自增长&#xff08;auto increment&#xff09;功能&#xff0c;即自动为每一行记录的自增长字段生成下一个值。 二、Oracle ID自增长方法 第一种&#xff0c;通过序列&#xff08;sequence&#…

蓝桥杯Web应用开发-CSS 基础语法4(字体属性、链接中的伪类、列表样式)

专栏持续更新中 字体属性 字体属性用于定义字体的类型、字号大小、加粗、斜体等方面样式。常用的字体属性如下表所示&#xff1a; 属 性可 取 值描 述fontfont-style、font-variant、font-weight、font-size&#xff08;或 line-height&#xff09;、font-family在一个声明中…

《计算机网络简易速速上手小册》第5章:无线网络和移动通信(2024 最新版)

5.1 WLAN的工作原理 - 揭秘无线局域网络的魔法 5.1.1 基础知识 无线局域网络&#xff08;WLAN&#xff09;允许设备通过无线方式连接到一个局部区域网络&#xff0c;主要基于IEEE 802.11标准&#xff0c;俗称Wi-Fi。WLAN的核心是无线路由器&#xff0c;它不仅充当着网络中各设…

【多模态】27、Vary | 通过扩充图像词汇来提升多模态模型在细粒度感知任务(OCR等)上的效果

论文&#xff1a;Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models 代码&#xff1a;https://github.com/Ucas-HaoranWei/Vary 出处&#xff1a;旷视 时间&#xff1a;2023.12 一、背景 当前流行的大型视觉-语言模型 Large Vision-Language Mode…

挑战杯 python+opencv+深度学习实现二维码识别

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; pythonopencv深度学习实现二维码识别 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;3分工作量&#xff1a;3分创新点&#xff1a;3分 该项目较为新颖&…

探索Gin框架:Golang Gin框架请求参数的获取

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站https://www.captainbed.cn/kitie。 前言 我们在专栏的前面几篇文章内讲解了Gin框架的路由配置&#xff0c;服务启动等内容。 专栏地址&…

后台弱口令问题

网站的运营管理不能缺少后台管理系统的支持&#xff0c;若能成功进入后台管理系 统&#xff0c;就意味着在Web渗透测试中成功了一大半。进行非授权登录有很多种方法&#xff0c; 这里主要介绍的是弱口令问题&#xff0c;破解弱口令是进入系统的最常见也是最有效的方 法&#xf…

如何在 Java 中通过 Map.Entry 访问 Map 的元素

我们使用 Map.Entry 来遍历 ConcurrentHashMap 的代码片段如下&#xff1a; for (Map.Entry<String, String> entry : map.entrySet()) { System.out.println("Key: " entry.getKey() ", Value: " entry.getValue()); } 在 Map.java 中&…

RabbitMQ_00000

MQ的相关概念 RabbitMQ官网地址&#xff1a;https://www.rabbitmq.com RabbitMQ API地址&#xff1a;https://rabbitmq.github.io/rabbitmq-java-client/api/current/ 什么是MQ&#xff1f; MQ(message queue)本质是个队列&#xff0c;FIFO先入先出&#xff0c;只不过队列中…

web前后端小坑记录

游戏服务器过年这段时间忙完了&#xff0c;好久没看web了&#xff0c;重温一下。发现竟然没有文章记录这些修BUG的过程&#xff0c;记录一下。 目录 如何处理F5刷新&#xff1f; 如何处理F5刷新&#xff1f; 后端应该发现路由不存在&#xff0c;直接返回打包好的index.html就…

2024美赛数学建模C题完整论文教学(含十几个处理后数据表格及python代码)

大家好呀&#xff0c;从发布赛题一直到现在&#xff0c;总算完成了数学建模美赛本次C题目Momentum in Tennis完整的成品论文。 本论文可以保证原创&#xff0c;保证高质量。绝不是随便引用一大堆模型和代码复制粘贴进来完全没有应用糊弄人的垃圾半成品论文。 C论文共49页&…

第6节、T型加减速转动【51单片机+L298N步进电机系列教程】

↑↑↑点击上方【目录】&#xff0c;查看本系列全部文章 摘要&#xff1a;本章介绍步进电机T型加减速的控制方法&#xff0c;分三个小节&#xff0c;本小节主要内容为该控制方法的推导与计算。目前各平台对该控制方法介绍的文章目前较多&#xff0c;但部分关键参数并未给出推导…

Linux【docker 设置阿里源】

文章目录 一、查看本地docker的镜像配置二、配置阿里镜像三、检查配置 一、查看本地docker的镜像配置 docker info一般没有配置过是不会出现Registry字段的 二、配置阿里镜像 直接执行下面代码即可&#xff0c;安装1.10.0以上版本的Docker客户端都会有/etc/docker 1.建立配置…

在openSUSE-Leap-15.5-DVD-x86_64中使用deepin-wine-8.16再使用微信3.9.7.29

在openSUSE-Leap-15.5-DVD-x86_64中使用deepin-wine-8.16再使用微信3.9.7.29 《在openSUSE-Leap-15.5-DVD-x86_64中使用deepin-wine-6.0.0.62再使用微信3.9.5》 https://blog.csdn.net/weixin_42145772/article/details/135074804?spm1001.2014.3001.5501 按照上面文章的方法…