Git 的基本概念和使用方式(附有思维导图)

ops/2025/3/13 9:16:58/

一、Git 简介

Git 是一个开源的分布式版本控制系统,由 Linus Torvalds 在 2005 年为帮助管理 Linux 内核开发版本而开发 。与集中式版本控制系统(如 SVN)不同,在分布式系统中,每个开发者的本地机器都拥有一个完整的 Git 仓库副本,包括代码和版本信息,这使得开发者在没有网络连接的情况下也能进行提交等操作,后续再同步到远程仓库。而集中式版本控制系统中,开发者的本地只保存工作副本,版本历史记录等都存储在中央服务器上,离开服务器很多操作无法进行。

二、Git 基本概念

(一)仓库(Repository)

仓库是 Git 存储项目所有文件和版本历史记录的地方,可以看作是项目的文件夹。它分为本地仓库和远程仓库:

  • 本地仓库:在开发者本地计算机上的仓库,通过git init命令可以在现有项目目录中初始化一个新的本地仓库,初始化后会在该目录下生成一个隐藏的.git文件夹,里面包含了所有必要的仓库文件。
  • 远程仓库:存储在云端或其他计算机上的仓库,如 GitHub、GitLab 等平台都提供远程仓库托管服务。远程仓库用于团队成员之间共享代码、协作开发,以及备份代码。每个远程仓库都有一个唯一的 URL,方便开发者克隆到本地或与之进行数据交互。

(二)提交(Commit)

提交是将文件的变化记录到 Git 仓库中的操作。每次提交都会创建一个包含唯一标识符(commit id,通常是一个很长的哈希值)的快照,这个快照记录了提交时项目中所有文件的状态。提交时还需要添加提交信息,用于简要描述本次提交所做的更改,方便后续查看历史记录时理解更改内容。

(三)分支(Branch)

分支是仓库中不同版本的副本,它允许开发者在不影响主分支(如 master)的情况下,独立地进行开发工作。例如,在开发新功能时,可以创建一个新分支,在该分支上编写、测试代码,完成后再合并到主分支。这样可以有效地管理多个开发任务,防止不同功能开发过程中的代码冲突。默认情况下,新创建的仓库有一个名为master的主分支。可以使用git branch命令查看当前仓库的分支情况,git branch <分支名>命令创建新分支。

(四)主分支(Master)

主分支是 Git 中默认的分支,通常用于存储生产环境中的稳定代码。在很多项目中,主分支上的代码是经过严格测试和验证的,可直接用于发布上线。不过现在也有很多项目使用main分支作为主分支。

(五)克隆(Clone)

克隆是从远程仓库中复制整个仓库到本地的操作。通过git clone <远程仓库URL>命令,开发者可以将远程仓库完整地下载到本地计算机,包括所有的文件、分支以及版本历史记录。克隆后,本地就有了一个可以独立进行开发的副本。

(六)拉取(Pull)

拉取是从远程仓库获取最新代码,并将其合并到本地仓库当前分支的操作。当团队中其他成员对远程仓库进行了修改,本地开发者可以使用git pull命令将这些修改拉取到本地,保持本地代码与远程仓库同步。git pull命令相当于先执行git fetch(从远程仓库获取最新的提交对象到本地仓库,但不自动合并),再执行git merge(将获取到的分支合并到当前分支)。

(七)推送(Push)

推送是将本地仓库中已提交的更改上传到远程仓库的操作。开发者在本地完成代码修改、提交后,通过git push命令将本地分支的更改推送到远程仓库,这样其他团队成员才能看到这些修改。推送时需要注意权限设置,以及本地分支和远程分支的对应关系。

(八)合并(Merge)

合并是将一个分支的修改整合到另一个分支的操作。当在一个分支上完成新功能开发或代码修复后,通常需要将该分支合并到主分支或其他目标分支。例如,在功能分支上开发完新功能后,切换到主分支,然后使用git merge <功能分支名>命令将功能分支的更改合并到主分支。如果合并过程中出现冲突(即不同分支对同一文件的同一部分进行了不同的修改),则需要手动解决冲突后再继续合并操作。

(九)冲突(Conflict)

当 Git 无法自动合并两个不同分支的修改时,就会产生冲突。例如,两个开发者同时修改了同一个文件的同一行内容,在合并分支时 Git 就无法确定应该保留哪个版本,这时就需要开发者手动编辑冲突文件,选择保留哪些更改,删除哪些冲突标记,然后再提交以完成合并。

(十)标签(Tag)

标签是对某个特定版本的引用,通常用于标记项目的发布版本,如v1.0v2.0等。通过标签可以方便地查看和切换到项目的某个历史版本。创建标签的命令是git tag <标签名>,还可以添加-a参数创建带附注的标签,并使用-m参数添加标签说明。

三、Git 使用方式

(一)安装与配置

  1. 安装:根据操作系统下载对应的 Git 安装包,然后按照安装向导进行安装。例如,在 Windows 系统上,可以从 Git 官方网站(Git)下载安装包;在 Linux 系统上,可以使用包管理器进行安装,如在 Ubuntu 系统上使用sudo apt-get install git命令安装。
  2. 配置:安装完成后,需要配置用户信息,以便在提交代码时标识身份。打开命令行工具,执行以下命令:
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"

--global参数表示对当前用户的所有仓库都生效,如果只想对某个特定仓库进行配置,则去掉该参数,在该仓库目录下执行配置命令。

(二)基本操作流程

以一个新建项目为例,以下是使用 Git 进行版本控制的基本操作步骤:

  1. 初始化仓库:在项目目录下,打开命令行工具,执行git init命令,将当前目录初始化为一个 Git 仓库。此时会在项目目录下生成一个隐藏的.git文件夹。
  2. 添加文件到暂存区:将项目中的文件添加到暂存区,暂存区是一个临时区域,用于暂存即将提交的文件更改。可以使用git add <文件名>命令添加单个文件,或使用git add.命令添加当前目录下的所有文件。例如,项目中有一个main.cpp文件,要将其添加到暂存区,执行git add main.cpp
  3. 提交更改:将暂存区的文件更改提交到本地仓库,执行git commit -m "提交信息"命令,其中-m后面的双引号内填写本次提交的简要说明,如 “初始化项目,添加 main.cpp 文件”。
  4. 连接远程仓库:如果需要与远程仓库进行协作,需要先将远程仓库添加到本地仓库的配置中。假设远程仓库的 URL 为https://github.com/user/repo.git,执行git remote add origin https://github.com/user/repo.git命令,将远程仓库命名为origin(这是一个常用的默认名称)。
  5. 推送更改到远程仓库:执行git push -u origin master(如果主分支是main,则为git push -u origin main)命令,将本地仓库的master(或main)分支推送到远程仓库的master(或main)分支。-u参数会将本地分支与远程分支建立追踪关系,后续推送时可以直接使用git push

(三)分支管理操作

  1. 查看分支:执行git branch命令,列出当前仓库的所有分支,当前所在分支前面会有一个星号*标识。
  2. 创建新分支:执行git branch <分支名>命令创建一个新分支,例如git branch feature-1创建一个名为feature-1的新分支。
  3. 切换分支:可以使用git checkout <分支名>命令切换到指定分支,例如git checkout feature-1切换到feature-1分支;从 Git 2.23 + 版本开始,也可以使用git switch <分支名>命令进行切换。
  4. 合并分支:假设在feature-1分支上完成了功能开发,要将其合并到main分支,先切换到main分支,即git checkout main(或git switch main),然后执行git merge feature-1命令将feature-1分支的更改合并到main分支。

(四)解决冲突

当合并分支出现冲突时,Git 会在冲突文件中标记出冲突的部分,格式如下:

plaintext

<<<<<<< HEAD
// 主分支上的代码内容
=======
// 待合并分支上的代码内容
>>>>>>> feature-1

开发者需要手动编辑文件,删除冲突标记<<<<<<< HEAD=======>>>>>>> feature-1,并选择保留合适的代码内容,然后保存文件。接着,再次执行git add <冲突文件名>将文件重新添加到暂存区,最后执行git commit -m "解决冲突并完成合并"完成合并操作。

(五)查看历史记录

使用git log命令可以查看提交历史记录,默认会显示每次提交的详细信息,包括提交的哈希值、作者、日期、提交信息等。如果希望输出更加简洁,每行只显示一个提交的简短信息,可以使用git log --oneline命令。

(六)撤销更改

  1. 撤销暂存区的更改:如果只是想取消暂存区中文件的更改,将其恢复到工作区的状态,可以使用git reset <文件名>命令;如果要取消暂存区中所有文件的更改,则使用git reset.命令。
  2. 撤销已提交的更改:如果想要撤销最近的一次提交,可以使用git reset HEAD~1命令,这会将 HEAD 指针回退到上一次提交,同时工作区和暂存区的内容也会相应改变。如果希望保留工作区的更改,只撤销提交,可以使用git revert <commit id>命令,该命令会创建一个新的提交来撤销指定提交的更改。

四、Git 可视化工具

除了命令行操作,也有许多可视化工具可以帮助使用 Git,它们提供了图形界面,使操作更加直观:

  • GitKraken:功能强大,支持跨平台(Windows、Mac、Linux),界面简洁美观,方便进行分支管理、合并、解决冲突等操作,还能直观地查看提交历史和文件差异。
  • SourceTree:由 Atlassian 开发,同样支持多平台,它简化了 Git 的操作流程,提供了丰富的可视化功能,如可视化的提交历史、分支图等,适合初学者快速上手 Git 操作。

五、思维导图示例

若看不清晰,请私信我;


http://www.ppmy.cn/ops/165379.html

相关文章

理解 XSS 和 CSP:保护你的 Web 应用免受恶意脚本攻击

在当今的互联网世界中&#xff0c;Web 应用的安全性至关重要。随着网络攻击技术的不断演进&#xff0c;开发者需要采取多种措施来保护用户数据和应用的完整性。本文将深入探讨两种关键的安全概念&#xff1a;XSS&#xff08;跨站脚本攻击&#xff09; 和 CSP&#xff08;内容安…

unet模型在车道线检测上的应用【代码+数据集+python环境+GUI系统】

unet模型在车道线检测上的应用【代码数据集python环境GUI系统】 VIL100数据集介绍 VIL-100 数据集是一个新的视频实例车道线检测数据集&#xff0c;由张玉君、朱磊等人在 2021 年发表的 ICCV 论文中提出。以下是对该数据集的详细介绍&#xff1a; 数据规模&#xff1a;包含 1…

Windows 上安装配置 Apache Tomcat 及Tomcat 与 JDK 版本对应

Apache Tomcat 是一种广泛使用的 Web 服务器和 Java 容器&#xff0c;对于部署和运行 Java Web 应用程序至关重要。它的可靠性和强大的功能使其成为全球开发人员和组织的首选。 在这篇文章中&#xff0c;我们将介绍在 Windows 机器上安装 Apache Tomcat 的过程&#xff0c;以确…

Python----数据可视化(Pyecharts一:介绍安装,全局配置,系列配置)

一、PyEcharts介绍 1.1、概况 Echarts 是一个由百度开源的数据可视化&#xff0c;凭借着良好的交互性&#xff0c;精巧的图表设计&#xff0c;得到了众多开发者的认可。而 Python 是一门富有表达力的语言&#xff0c;很适合用于数据处理。当数据分析遇上数据可视化时&#xff…

数学建模:MATLAB强化学习

一、强化学习简述 强化学习是一种通过与环境交互&#xff0c;学习状态到行为的映射关系&#xff0c;以获得最大积累期望回报的方法。包含环境&#xff0c;动作和奖励三部分&#xff0c;本质是智能体通过与环境的交互&#xff0c;使得其作出的动作所得到的决策得到的总的奖励达…

数字隔离器,如何提升储能系统的安全与效能?

随着全球对光伏、风电等可再生能源需求的持续增长&#xff0c;在全球能源转型的浪潮中&#xff0c;储能技术凭借着可平衡能源供需、提高能源利用效率等优势&#xff0c;已成为实现 “双碳” 目标的核心支撑。据国家能源局公布数据显示&#xff0c;截至2024年底&#xff0c;我国…

java八股文之消息中间件

<在Java中使用消息中间件时&#xff0c;通常会选择一些流行的开源解决方案&#xff0c;如Apache Kafka、RabbitMQ、ActiveMQ等。这些消息中间件提供了高效、可靠的消息传递机制&#xff0c;广泛应用于企业级应用中。下面我将介绍如何在Java中使用Apache Kafka进行消息传递的…

RK3568平台(音频篇)AD82584F功放

一.AD82584 功放芯片简介 AD82584 是 Analog Devices 公司推出的一款高性能、多通道音频功率放大器芯片。 它专为汽车音响系统、家庭影院和其他需要高质量音频放大的应用而设计。以下是关于 AD82584 的详细介绍。 Analog Devices 官方网站:https://www.analog.com AD82584…