Git 简介

Git 是目前全球最流行的分布式版本控制系统(Distributed Version Control System, DVCS),核心作用是追踪文件修改历史、支持多人协同开发,并能高效管理代码(或任何文本类文件)的版本迭代。它由 Linux 内核创始人 Linus Torvalds 于 2005 年为解决 Linux 内核开发中的协作问题而设计,如今已成为软件开发(尤其是团队开发)的标配工具。

一、Git 的核心特点

Git 的优势源于其 “分布式” 设计和高效的版本管理机制,核心特点可概括为以下 5 点:

  1. 分布式架构(核心优势) 与传统的 “集中式版本控制系统(如 SVN)” 不同,Git 中每个开发者的本地设备都拥有完整的代码仓库(包含所有历史版本和分支),无需依赖中央服务器即可独立完成代码提交、回滚、分支创建等操作。仅在需要共享代码时(如同步团队进度),才与远程仓库(如 GitHub、GitLab)交互,大幅降低了对网络的依赖,也避免了中央服务器故障导致的风险。

  2. 完整的版本追踪 Git 会记录文件的每一次修改(包括修改人、修改时间、修改内容),形成不可篡改的 “版本历史”。开发者可随时回滚到任意历史版本,或对比不同版本间的差异,轻松定位问题(如 “某功能是在哪次修改后出现 Bug 的”)。

  3. 高效处理大项目 Git 采用 “快照式” 存储(而非传统的 “差异比较”),仅记录文件修改的关键信息,而非每次修改的完整副本,因此对大型项目(如 Linux 内核、Android 源码)的版本管理效率极高,提交、分支切换等操作通常在毫秒级完成。

  4. 灵活的分支管理 分支是 Git 的 “灵魂功能”。开发者可基于主分支(如 main)创建独立分支(如 feature/login 开发登录功能、bugfix/payment 修复支付 Bug),分支间的修改互不干扰;完成后再通过 “合并(merge)” 或 “变基(rebase)” 将分支代码整合回主分支,完美支持并行开发(如多人同时开发不同功能)。

  5. 数据完整性保障 Git 对所有文件和版本信息都通过 SHA-1 哈希算法生成唯一标识(40 位十六进制字符串),任何对文件或历史的篡改都会导致哈希值变化,Git 能立即检测到,确保代码历史的真实性和完整性。

二、Git 的核心概念

理解 Git 的工作流程,需先掌握 4 个核心区域和几个关键术语:

1. 四大核心区域

Git 的工作流程围绕 “文件在不同区域的流转” 展开,四个区域的关系如下:

区域名称英文作用说明
工作区Working Directory开发者直接编辑文件的目录(如本地项目文件夹),是 “未被 Git 追踪” 的原始文件区。
暂存区Staging Area临时存放 “待提交” 的修改(通过 git add 命令将工作区的修改移入),可理解为 “提交前的筛选器”。
本地仓库Local Repository存储所有版本历史的核心区域(通过 git commit 命令将暂存区的修改移入),位于项目目录下的 .git 隐藏文件夹中。
远程仓库Remote Repository用于团队共享的公共仓库(如 GitHub 上的仓库),通过 git push/pull 与本地仓库同步。

2. 关键术语

  • Commit(提交):将暂存区的修改 “固化” 到本地仓库的操作,每次提交会生成一个唯一的 commit ID(哈希值),代表一个版本。提交时需填写 “提交信息”(如 “完成登录接口开发”),便于后续追溯。

  • Branch(分支):版本历史的 “平行时间线”,默认分支通常为 main(或旧版本的 master),新建分支会从主分支的某个节点 “分叉”,独立记录修改。

  • Merge(合并):将一个分支的修改整合到另一个分支的操作(如将 feature/login 合并到 main)。

  • Pull/Pushgit pull 是 “拉取远程仓库的最新代码到本地”,git push 是 “将本地仓库的修改推送到远程仓库”,是团队协作的核心操作。

  • Clone(克隆):将远程仓库的完整内容下载到本地,生成一个新的本地仓库(首次获取项目代码时使用)。

三、Git 常用基础命令

以下是日常开发中最高频的 Git 命令,覆盖 “初始化 - 修改 - 提交 - 同步” 的完整流程:

命令作用说明示例
git init在本地目录初始化一个 Git 仓库(创建 .git 文件夹)cd 项目目录 && git init
git clone <远程地址>克隆远程仓库到本地git clone https://github.com/xxx/xxx.git
git add <文件/目录>将工作区的修改添加到暂存区git add index.js(单个文件)、git add .(所有修改)
git commit -m "<信息>"将暂存区的修改提交到本地仓库,-m 后为提交信息git commit -m "fix: 修复登录验证码过期问题"
git status查看当前工作区、暂存区的状态(如 “未追踪的文件”“待提交的修改”)git status
git log查看本地仓库的提交历史(包含 commit ID、作者、时间等)git log --oneline(简洁模式)
git branch查看 / 创建分支(不加参数查看,加参数创建)git branch(查看)、git branch feature/pay(创建支付分支)
git switch <分支名>切换到指定分支(Git 2.23+ 推荐,替代旧命令 git checkoutgit switch main
git merge <分支名>将指定分支合并到当前分支git switch main && git merge feature/pay(将支付分支合并到主分支)
git pull拉取远程仓库的最新代码并合并到本地当前分支git pull origin main(拉取远程 main 分支)
git push将本地当前分支的修改推送到远程仓库git push origin feature/pay(推送本地支付分支到远程)

四、Git 与 SVN 的核心区别

很多新手会将 Git 与传统集中式版本控制系统 SVN 对比,两者的核心差异如下:

对比维度Git(分布式)SVN(集中式)
架构每个本地设备有完整仓库,无强制中央依赖仅中央服务器有完整仓库,本地仅存当前版本
离线工作支持(提交、分支等操作无需网络)不支持(几乎所有操作需连接中央服务器)
分支效率分支创建 / 切换 / 合并速度极快(毫秒级)分支操作依赖中央服务器,效率低
数据安全性本地和远程均有完整备份,不易丢失依赖中央服务器,服务器故障可能丢失数据
学习成本概念较多(如暂存区、分布式),入门稍难概念简单,入门快

五、Git 常见应用场景

  1. 团队协作开发:多人同时开发一个项目,通过分支隔离修改,通过远程仓库同步进度,避免代码冲突(如通过 git pull 提前同步他人代码)。

  2. 个人项目版本管理:追踪个人项目的修改历史,如需回滚到 “上周能正常运行的版本”,可通过 git log 找到对应 commit ID 后回滚。

  3. 开源项目贡献:通过 “Fork(复刻远程仓库)→ 本地修改 → Pull Request(PR,提交贡献请求)” 的流程,向开源项目提交代码(如向 GitHub 上的知名项目贡献 Bug 修复)。

六、主流 Git 托管平台

Git 本身是命令行工具,需配合远程仓库使用,目前主流的托管平台有:

  • GitHub:全球最大的开源项目托管平台,支持 Git 仓库管理、PR 协作、CI/CD 等功能。

  • GitLab:支持私有仓库(适合企业内部项目),功能全面,可自行部署私有 GitLab 服务器。

  • Gitee(码云):国内的 Git 托管平台,访问速度快,适合国内团队或对隐私有要求的项目。

总之,Git 不仅是 “管理代码版本的工具”,更是现代软件开发协作流程的核心基础设施。掌握 Git 的基础操作和核心理念,是开发者必备的技能之一。

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

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

相关文章

后端Web实战-Spring原理

目录 1. 配置优先级 2. Bean管理 2.1 获取Bean 2.2 Bean作用域 面试题&#xff1a;Lazy是如何解决循环依赖问题的&#xff1f; 2.3 第三方Bean 3. SpringBoot原理 3.1 起步依赖 3.2 自动配置 3.2.1 概述 3.2.2 自动配置的原理及常见方案 3.2.2.1 概述 3.2.2.2 方案…

在 Qoder 等 AI 二创 IDE 里用 VS Code Remote-SSH 的“曲线连接”实战

目标&#xff1a;让你在 Qoder 等在线/AI 辅助 IDE 中&#xff0c;也能像本地 VS Code 一样通过 Remote-SSH 连接到自己的远程服务器进行开发。 前提&#xff1a;只在你拥有或被授权的服务器上使用&#xff0c;遵守所用平台的条款与限制。两句话说清楚 先用本地 VS Code 正常连…

python发送请求SSL验证设置

这个错误通常是由于SSL/TLS握手失败导致的&#xff0c;可能原因包括证书验证问题、不兼容的加密协议或网络连接中断。以下是几种解决方案&#xff0c;按推荐顺序排列&#xff1a; 方案一&#xff1a;临时禁用SSL验证&#xff08;快速测试&#xff09; response requests.get(u…

工厂自动化正从 “人工堆叠” 向 “设备替代” 快速转变

​人工进行零件排列&#xff0c;虽在操作灵活性上有一定表现&#xff0c;但实际应用中存在明显短板&#xff0c;对工厂自动化转型形成制约。从成本来看&#xff0c;一名工人日均工资约数百元&#xff0c;若需 5-6 名工人协同作业&#xff0c;月均人力成本易突破万元&#xff0c…

中标麒麟7.4部署gitlab-runner

1. 部署环境 本次部署环境完全断网。需要离线下载gitlab-runner及其依赖。 本次部署环境为中标麒麟7.4。目前机器上部署了gitlab&#xff0c;安装了maven。 2. 部署步骤 2.1 在外部下载好依赖 我首先在腾讯云上布置了一个centos7.9的虚拟机&#xff0c;没有安装任何东西。 …

在 IDEA 2024 创建 Vue 项目(保姆级)

目录 一、 前后端分离 1. 简介 2. 实现前后端分离的常用前端框架 3. 前后端分离和动静分离 3.1 前后端分离: 3.2 动静分离: 二、 Vue.js概述 1. 简介 2. SPA介绍 2.1 优点 2.2 缺点 3. MVVM介绍 3.1 示例 三、 名词解释 1. Node.js 2. npm 3. webpack 4. Vue…

Coze源码分析-资源库-创建知识库-后端源码-应用/领域/数据访问

3. 应用服务层 3.1 知识库应用服务 文件位置: backend/application/knowledge/knowledge.go func (k *KnowledgeApplicationService) CreateKnowledge(ctx context.Context, req *dataset.CreateDatasetRequest) (*dataset.CreateDatasetResponse, error) {// 1. 转换文档类型d…

Shopify指纹手机矩阵:无限扩店,横扫FB/GG广告封号风险

一、 为什么需要为Shopify使用指纹手机&#xff1f;虽然Shopify不会因为你多开店而封号&#xff0c;但以下场景需要隔离环境&#xff1a;规避广告平台关联&#xff1a;这是最核心的用途。你会用Facebook、Google、TikTok等广告平台为你的Shopify店铺引流。这些广告平台严格禁止…

【Python】家庭用电数据分析Prophet预测

数据集&#xff1a;Household Electricity Consumption | Kaggle 目录 数据集简介 探索性分析 Prophet预测 Prophet模型 Prophet理念 Prophet优点 数据集简介 240000-household-electricity-consumption-records数据集包含了一个家庭6个月的用电数据&#xff0c;收集于2…

信息系统运维管理

运行维护服务指的是采用信息技术手段及方法&#xff0c;依据客户提出的服务要求&#xff0c;为其在使用信息系统过程中提出的需求提供的综合服务是信息技术服务中的一种主要类型。运行维护服务对象是指信息系统工程建设项目交付的内容&#xff0c;包括机房基础设施&#xff0c;…

系统编程完结整理以及补充

Shell&#xff08;命令与脚本语法&#xff09; 系统编程&#xff08;一&#xff09;shell的学习-CSDN博客 功能/概念语法/关键字参数/用法说明返回值/效果难易点注意事项示例/实验提示定义函数func_name() { commands; }无参数或通过 $1 $2 ... 传参函数执行参数传递、全局变…

第十四届蓝桥杯青少组C++选拔赛[2022.12.18]第二部分编程题(2、字符翻转)

参考程序&#xff1a;#include <bits/stdc.h> using namespace std;int main() {string s;cin >> s; // 读取输入字符串&#xff0c;若无输入则结束for (int i 0; i < (int)s.size(); i) {// i 从 0 开始&#xff0c;位置是 i1&#xff1b;如果 i 是奇数&#…

Django基础环境入门

熟悉过程 搭建环境&#xff0c;运行起来基础请求到服务接口跟java web对比 说明先不纠结细节先跑起来再说 1. 环境搭建 python已经安装&#xff0c;使用conda管理 django安装 django官方文档 pip install django也可以命令创建 mkdir djangotutorial django-admin startp…

408学习之c语言(结构体)

今天给大家分享C语言中结构体的几种常见使用方法&#xff0c;包括基础结构体定义与初始化&#xff0c;结构体指针的两种访问方式&#xff0c;结构体数组的遍历&#xff0c;动态内存分配与结构体使用&#xff0c;typedef简化结构体类型基础结构体定义与使用#define _CRT_SECURE_…

Navicat中设计表格默认值时,如何不设置成NULL,而是设置成空文本?

在 Navicat 中设计表时&#xff0c;将字段的默认值设置为空文本而不是 NULL 是一个非常常见的需求。操作很简单&#xff0c;但有几个细节需要注意。■ 方法一&#xff1a;通过“设计表”界面设置&#xff08;最常用&#xff09;1. 连接数据库并找到表&#xff1a;在左侧连接导…

深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)第十三章知识点问答(15题)

预告下一本 可能是mysql8的书籍 或者是AI应用工程的基本岗位所有技能 问题1 什么是 线程安全&#xff1f;在 Java 中如何定义“线程安全”&#xff1f;线程安全&#xff08;Thread Safety&#xff09; 的定义是&#xff1a; 当多个线程同时访问某个类的对象时&#xff0c;无论运…

【医疗 AI】Baichuan-M2:大语言模型在医疗领域的动态验证框架

Baichuan-M2 医疗大模型&#xff1a;技术解读与使用方法 Baichuan-M2&#xff1a;大语言模型在医疗领域的动态验证框架 【医疗 AI】Baichuan-M2&#xff1a;大语言模型在医疗领域的动态验证框架0. Baichuan-M2 模型简介0.1 基本信息0.2 主要贡献0.3 论文摘要1. 引言2. 验证系统…

Ubuntu\Linux环境中驱动版本配置cudaToolKit

修改环境变量。 1. 首先检查当前的环境变量 # 查看当前PATH echo $PATH# 查看当前LD_LIBRARY_PATH echo $LD_LIBRARY_PATH# 查看当前CUDA_HOME echo $CUDA_HOME2. 确定正确的CUDA安装路径 # 查看系统中有哪些CUDA版本 ls /usr/local/cuda*3. 修改环境变量(永久生效) 编辑…

Linux基础开发工具(gcc/g++,yum,vim,make/makefile)

目录 软件包管理器——yum Linux下&#xff0c;软件的安装 yum与软件包的关系 yum命令的运用 1.查看软件包 2.安装/删除软件包 编辑器——vim vim的基本概念 vim的基本操作 命令模式命令 移动光标 删除文字 撤销上一次操作 跳至指定的行 底行模式命令 编译器——…

数据结构之跳表

跳表&#xff08;Skip List&#xff09;是一种基于概率平衡的数据结构&#xff0c;通过多层有序链表实现高效的查找、插入和删除操作。它在最坏情况下时间复杂度为 (O(n))&#xff0c;但通过随机化设计&#xff0c;平均时间复杂度可优化至 (O(\log n))&#xff0c;与平衡二叉搜…