当前位置: 首页 > article >正文

git基础概念和操作

文章目录

  • 一、分布式版本控制器和集中式
    • 1.基本概念
    • 2.主要特点
    • 3.使用场景
    • 4.操作命令示例
  • 二、git基本概念
    • 1.仓库(Repository)
    • 2.提交(Commit)
    • 3.暂存区(Staging Area)
    • 4.分支(Branch)
    • 5.标签(Tag)
    • 6.远程(Remote)
    • 7.HEAD
  • 三、git优缺点
    • 1.Git 的优点
      • 分布式特性
      • 强大的分支管理
      • 灵活的工作流程
      • 社区支持和生态系统
    • 2.Git 的缺点
      • 学习曲线较陡
      • 冲突解决复杂
      • 占用磁盘空间大
      • 网络带宽要求高
  • 四、git常用指令
      • 仓库操作
        • 1. 初始化仓库
        • 2. 克隆远程仓库
      • 提交操作
        • 1. 添加文件到暂存区
        • 2. 提交暂存区的文件到本地仓库
        • 3. 一次完成添加和提交操作
      • 分支操作
        • 1. 查看分支
        • 2. 创建新分支
        • 3. 切换分支
        • 4. 创建并切换到新分支
        • 5. 合并分支
        • 6. 删除分支
      • 远程仓库操作
        • 1. 查看远程仓库信息
        • 2. 添加远程仓库
        • 3. 从远程仓库拉取代码
        • 4. 将本地代码推送到远程仓库
      • 查看历史记录
        • 1. 查看提交历史
        • 2. 简洁查看提交历史
      • 撤销操作
        • 1. 撤销暂存区的文件
        • 2. 撤销工作目录的修改
        • 3. 回退到指定提交

一、分布式版本控制器和集中式

Git、SVN 和 CVS 都是常用的版本控制系统,以下是它们的相关介绍及对比:

1.基本概念

  • Git:是一种分布式版本控制系统,它允许每个开发者在自己的本地机器上拥有完整的版本库,包括所有的提交历史和文件版本。开发者可以在本地进行提交、分支管理等操作,然后再将本地的更改推送到远程服务器或与其他开发者共享。
  • SVN:即Subversion,是一种集中式版本控制系统。它有一个中央服务器,所有的版本信息都存储在服务器上,开发者通过网络连接到服务器进行提交、更新等操作,本地只保留最新版本的文件和一些临时工作目录。
  • CVS:即 Concurrent Versions System,是最早的广泛使用的版本控制系统之一,也是集中式的。它以类似的方式工作,有一个中心服务器来存储版本数据,开发人员从服务器获取和提交更改。

2.主要特点

  • Git
    • 分布式:每个**开发者的本地环境都是一个完整的版本库**,这使得开发者可以在没有网络的情况下进行开发、提交等操作,之后再与远程仓库同步。
    • 高效的分支管理:创建、切换和合并分支非常快速和高效,使得开发人员可以轻松地进行并行开发,例如同时进行新功能开发、bug 修复等不同任务,互不干扰。
    • 数据安全:采用哈希算法对数据进行校验和存储,确保数据的完整性和一致性。如果数据在传输或存储过程中发生损坏,Git 能够检测到并提示错误。
  • SVN
    • 集中式管理:所有版本数据集中存储在服务器上,便于统一管理和维护,管理员可以方便地控制用户的访问权限,确保代码的安全性和规范性。
    • 简单易用:对于小型团队或简单项目,SVN 的操作相对简单,容易上手。开发人员只需要关注与服务器之间的交互,进行提交和更新操作即可。
    • 支持原子提交:可以将多个文件的修改作为一个原子操作提交到服务器,要么全部成功,要么全部失败,保证了版本库的一致性。
  • CVS
    • 历史悠久:具有很长的发展历史,有大量的开源项目使用 CVS 进行版本控制,积累了丰富的使用经验和相关工具。
    • 基本功能完备:提供了版本控制的基本功能,如提交、更新、查看历史记录等,能够满足一般项目的版本管理需求。
    • 广泛的系统支持:可以在多种操作系统上运行,包括 UNIX、Windows 等,具有较好的跨平台性。

3.使用场景

  • Git:适用于大型分布式开发项目,尤其是**开源项目和需要频繁进行分支和合并的项目**。像 Linux 内核开发、GitHub 上的众多项目等都使用 Git 进行版本控制。
  • SVN:适合团队规模较小、对权限管理要求较高、工作流程相对简单的项目。例如一些企业内部的小型项目,开发人员需要严格按照规定的权限和流程进行代码管理。
  • CVS:对于一些历史遗留项目或者对版本控制功能要求不高、追求简单实用的项目,CVS 仍然可以发挥作用。一些传统的科研项目、小型软件公司的老项目可能还在使用 CVS。

4.操作命令示例

  • Git
    • 克隆仓库git clone <repository_url>
    • 提交更改git add <file> 然后 git commit -m "Commit message"
    • 推送更改git push origin <branch_name>
  • SVN
    • 克隆仓库svn checkout <repository_url>
    • 提交更改svn add <file> 然后 svn commit -m "Commit message"
    • 更新文件svn update
  • CVS
    • 检出模块cvs checkout <module_name>
    • 提交更改cvs commit -m "Commit message"
    • 更新文件cvs update

二、git基本概念

Git 是一个分布式版本控制系统,以下为你详细介绍其一些基本概念:

在这里插入图片描述

1.仓库(Repository)

  • 定义:仓库是存储项目所有文件和版本历史的地方。它包含了项目从创建以来的所有提交记录、分支信息等。
  • 分类
    • 本地仓库:存在于开发者本地计算机上的仓库,开发者可以在本地仓库进行各种版本控制操作,如提交、分支管理等,无需网络连接
    • 远程仓库:存储在远程服务器上的仓库,通常用于团队协作开发,多个开发者可以通过网络与远程仓库进行交互,共享代码和版本信息。
  • 创建仓库
    • 创建本地仓库:使用 git init 命令可以将一个普通的本地目录初始化为一个 Git 仓库。
    • 克隆远程仓库:使用 git clone <repository_url> 命令可以将远程仓库复制到本地。

2.提交(Commit)

  • 定义:提交是将本地工作目录中的更改保存到本地仓库的操作。每次提交都会生成一个唯一的哈希值(如 SHA - 1)来标识该提交,同时包含提交的作者、提交时间、提交说明等元数据。
  • 操作流程 :
    • 首先使用 git add <file> 命令将工作目录中修改的文件添加到暂存区。
    • 然后使用 git commit -m "commit message" 命令将暂存区的文件更改提交到本地仓库,其中 "commit message" 是对本次提交的简要描述。

3.暂存区(Staging Area)

  • 定义暂存区也称为索引(Index),它是工作目录和本地仓库之间的一个中间区域。开发者可以选择将工作目录中的部分或全部更改添加到暂存区,然后再将暂存区的更改一次性提交到本地仓库
  • 作用:暂存区提供了一种灵活的方式来组织和管理提交内容,允许开发者将不同类型的更改分别提交,使提交记录更加清晰和有意义。
  • 操作命令
    • git add <file>:将指定文件的更改添加到暂存区。
    • git add .:将当前工作目录下所有更改的文件添加到暂存区。
    • git reset <file>:将指定文件从暂存区移除,但不影响工作目录中的文件。

4.分支(Branch)

  • 定义:分支是 Git 中非常重要的概念,它允许开发者在不影响主分支的情况下,独立地进行新功能开发、bug 修复等工作。每个分支都有自己独立的提交历史,可以在需要时将分支合并到其他分支。
  • 主分支:通常情况下,每个仓库都有一个默认的主分支,命名为 mastermain,它代表项目的稳定版本。
  • 操作命令
    • git branch:查看本地分支列表。
    • git branch <branch_name>:创建一个新的分支。
    • git checkout <branch_name>:切换到指定的分支。
    • git checkout -b <branch_name>:创建并切换到一个新的分支。
    • git merge <branch_name>:将指定分支合并到当前分支。

5.标签(Tag)

  • 定义:标签是对某个特定提交的一个固定引用,通常用于标记项目的重要版本,如发布版本、里程碑等。标签类似于分支,但它是静态的,不会随着新的提交而移动。
  • 操作命令
    • git tag:查看所有标签。
    • git tag <tag_name>:为当前提交创建一个轻量级标签。
    • git tag -a <tag_name> -m "tag message":为当前提交创建一个带注释的标签。
    • git push origin <tag_name>:将本地标签推送到远程仓库。

6.远程(Remote)

  • 定义:远程是指远程仓库的别名,通过远程可以方便地与远程仓库进行交互。默认情况下,克隆远程仓库时会自动创建一个名为 origin 的远程。
  • 操作命令
    • git remote -v:查看当前仓库的远程信息。
    • git remote add <remote_name> <repository_url>:添加一个新的远程仓库。
    • git push <remote_name> <branch_name>:将本地分支的更改推送到远程仓库。
    • git pull <remote_name> <branch_name>:从远程仓库拉取并合并更改到本地分支。

7.HEAD

  • 定义:HEAD 是一个特殊的引用,它指向当前所在的分支或提交。当切换分支时,HEAD 会随之移动到新的分支或提交上。
  • 作用:HEAD 用于标识当前工作的位置,在进行提交、合并等操作时,Git 会根据 HEAD 的指向来确定操作的目标。

三、git优缺点

1.Git 的优点

分布式特性

  • 离线工作每个开发者的本地环境都有完整的版本库,包含所有提交历史和文件版本。这意味着开发者可以在没有网络连接的情况下进行日常开发工作,如提交代码、创建分支、查看历史记录等。例如,在飞机上、偏远地区等没有网络的环境中,开发者依然能够继续手中的项目开发,等网络恢复后再将本地的修改同步到远程仓库。
  • 数据安全:由于每个开发者的本地都有完整的版本库副本,即使远程仓库出现故障(如服务器硬件损坏、网络攻击等),也可以从多个开发者的本地仓库中恢复数据。而且,Git 使用哈希算法对数据进行校验和存储,能有效防止数据在传输或存储过程中发生损坏。
  • 高效协作分布式的架构使得多个开发者可以并行地进行开发工作,各自在本地仓库进行修改和提交,然后再将本地的更改推送到远程仓库进行合并。这种方式大大提高了开发效率,减少了开发者之间的等待时间。

强大的分支管理

  • 快速创建和切换:Git 创建和切换分支的操作非常快速,几乎是瞬间完成。这使得开发者可以轻松地在不同的功能开发、bug 修复等任务之间进行切换,而不会影响其他工作。例如,当开发者正在进行一个新功能的开发时,突然发现一个紧急的 bug 需要修复,此时可以快速切换到一个新的分支进行 bug 修复,修复完成后再切换回原来的功能开发分支继续工作。
  • 并行开发:多个开发者可以在不同的分支上同时进行开发,互不干扰。每个分支都有自己独立的提交历史,开发完成后可以将这些分支合并到主分支上。这种并行开发的方式极大地提高了团队的开发效率,尤其适用于大型项目的开发。

灵活的工作流程

  • 多种工作流支持:Git 支持多种不同的工作流程,如 GitFlow、GitHub Flow、GitLab Flow 等。团队可以根据项目的特点和需求选择适合的工作流程。例如,GitFlow 适用于有明确发布周期的项目,它定义了主分支(master)、开发分支(develop)、功能分支(feature)、发布分支(release)和热修复分支(hotfix)等不同类型的分支,每个分支都有特定的职责和使用规则;而 GitHub Flow 则更简单轻量级,适用于快速迭代的项目,强调快速将功能合并到主分支。
  • 自定义工作流:除了上述常见的工作流程,Git 还允许团队根据自身的实际情况自定义工作流程,以满足特定的开发需求。

社区支持和生态系统

  • 广泛使用:Git 是目前最流行的版本控制系统,被广泛应用于各种开源项目和商业项目中。大量的开发者使用 Git 进行项目开发,这意味着在遇到问题时可以很容易地在社区中找到解决方案。
  • 丰富的工具和服务:围绕 Git 形成了丰富的生态系统,有许多优秀的工具和服务可供选择。例如,GitHub、GitLab、Bitbucket 等代码托管平台,提供了代码托管、协作开发、问题跟踪、持续集成等一系列功能;还有许多可视化的 Git 客户端工具,如 SourceTree、GitKraken 等,方便开发者进行操作。

2.Git 的缺点

学习曲线较陡

  • 概念复杂:Git 有许多复杂的概念,如仓库、提交、暂存区、分支、标签、远程等,对于初学者来说,理解这些概念并掌握它们之间的关系需要花费一定的时间和精力。例如,暂存区的概念可能会让初学者感到困惑,不清楚为什么需要将文件添加到暂存区再进行提交。
  • 命令繁多:Git 的命令非常多,而且有些命令的使用方式和参数比较复杂。例如,git rebase 命令可以用于整理提交历史,但使用不当可能会导致数据丢失或冲突难以解决。对于初学者来说,记住这些命令并正确使用它们是一个挑战。

冲突解决复杂

  • 冲突频繁:由于 Git 支持并行开发,多个开发者在不同的分支上进行修改,当合并分支时,很容易出现冲突。尤其是在多人同时修改同一文件的同一部分时,冲突的解决会比较麻烦。
  • 解决难度大:解决冲突需要开发者对代码有深入的理解,并且要手动合并冲突的部分。在一些复杂的项目中,冲突可能涉及多个文件和多个提交,解决起来非常耗时且容易出错。

占用磁盘空间大

  • 完整副本存储:由于每个开发者的本地都有完整的版本库副本,包含了项目的所有历史记录和文件版本,这会占用大量的磁盘空间。对于一些大型项目,版本库可能会达到几百兆甚至几个吉字节,这对于磁盘空间有限的开发者来说可能是一个问题。
  • 数据冗余:在分布式环境中,多个开发者的本地仓库可能会存在大量的数据冗余,进一步增加了磁盘空间的占用。

网络带宽要求高

  • 克隆和推送数据量大:当克隆一个远程仓库时,需要下载整个版本库的内容,包括所有的提交历史和文件版本,这会消耗大量的网络带宽。同样,当推送本地的更改到远程仓库时,如果更改的内容较多,也会占用较多的网络带宽。在网络带宽有限的情况下,克隆和推送操作可能会非常缓慢。

四、git常用指令

Git 有众多指令,下面按照不同的使用场景为你介绍常用指令:

仓库操作

1. 初始化仓库
git init
  • 说明:在当前目录下初始化一个新的 Git 仓库,会在该目录下创建一个 .git 隐藏文件夹,用于存储版本控制相关的信息。
2. 克隆远程仓库
git clone <repository_url>
  • 说明:将远程仓库(如 GitHub、GitLab 上的仓库)复制到本地。<repository_url> 是远程仓库的地址,可以是 HTTPS 或 SSH 格式。例如:
git clone https://github.com/user/repo.git

提交操作

1. 添加文件到暂存区
git add <file>
  • 说明:将指定的文件添加到暂存区。如果要添加当前目录下的所有文件,可以使用:
git add .
2. 提交暂存区的文件到本地仓库
git commit -m "commit message"
  • 说明:将暂存区的文件更改提交到本地仓库,-m 后面跟着本次提交的描述信息,用于说明本次提交做了哪些更改。
3. 一次完成添加和提交操作
git commit -am "commit message"
  • 说明:此命令仅适用于已被 Git 跟踪的文件,它会将所有已跟踪文件的更改添加到暂存区并提交到本地仓库。

分支操作

1. 查看分支
git branch
  • 说明:查看本地仓库的所有分支,当前所在分支会以绿色显示并带有 * 号。
2. 创建新分支
git branch <branch_name>
  • 说明:创建一个名为 <branch_name> 的新分支,但不会切换到该分支。
3. 切换分支
git checkout <branch_name>
  • 说明:切换到指定的分支。
4. 创建并切换到新分支
git checkout -b <branch_name>
  • 说明:这是一个组合命令,相当于先执行 git branch <branch_name> 再执行 git checkout <branch_name>
5. 合并分支
git merge <branch_name>
  • 说明:将指定的 <branch_name> 分支合并到当前所在的分支。
6. 删除分支
git branch -d <branch_name>
  • 说明:删除指定的本地分支,前提是该分支已经合并到其他分支。如果要强制删除未合并的分支,可以使用 -D 选项。

远程仓库操作

1. 查看远程仓库信息
git remote -v
  • 说明:显示当前仓库配置的所有远程仓库的名称和对应的 URL。
2. 添加远程仓库
git remote add <remote_name> <repository_url>
  • 说明:添加一个新的远程仓库,<remote_name> 是为远程仓库指定的别名,通常使用 origin 作为默认别名。
3. 从远程仓库拉取代码
git pull <remote_name> <branch_name>
  • 说明:从指定的远程仓库的指定分支拉取代码,并将其合并到当前本地分支。如果不指定 <branch_name>,默认拉取当前分支对应的远程分支。
4. 将本地代码推送到远程仓库
git push <remote_name> <branch_name>
  • 说明:将本地的指定分支推送到远程仓库的对应分支。如果是第一次推送该分支,可以使用 -u 选项,这样之后再推送该分支时就可以直接使用 git push 命令,例如:
git push -u origin <branch_name>

查看历史记录

1. 查看提交历史
git log
  • 说明:显示当前分支的提交历史,包括提交的哈希值、作者、提交时间和提交说明等信息。
2. 简洁查看提交历史
git log --oneline
  • 说明:以简洁的一行格式显示提交历史,只显示提交的哈希值前几位和提交说明。

撤销操作

1. 撤销暂存区的文件
git reset <file>
  • 说明:将指定文件从暂存区移除,但不会改变工作目录中的文件内容。
2. 撤销工作目录的修改
git checkout -- <file>
  • 说明:丢弃工作目录中指定文件的修改,使其恢复到上一次提交时的状态。
3. 回退到指定提交
git reset --hard <commit_hash>
  • 说明:将本地仓库的 HEAD、分支指针和工作目录都回退到指定的提交,<commit_hash> 是提交的哈希值。使用 --hard 选项会彻底丢弃回退点之后的所有更改,请谨慎使用。

http://www.kler.cn/a/593072.html

相关文章:

  • Matlab概率区间预测全家桶更新了,新增光伏出力区间预测,4种分布可供预测
  • node-ddk,electron 组件, 系统基上下文菜单(右键菜单)
  • 在麒麟系统(基于Ubuntu或Debuntu)的离线环境中创建本地APT仓库
  • Certd自动化申请和部署SSL证书并配置https
  • MySQL(事物下)
  • C#通过SignalR直接返回流式响应内容
  • git创建一个本地仓库与远程仓库关联并推送文件到远程仓库
  • 十八、实战开发 uni-app x 项目(仿京东)- 后端生成API文档
  • 再探C语言(1)
  • 4.1-4 SadTalker数字人 语音和嘴唇对应的方案
  • 【Go语言圣经2.6】
  • 【责任链模式的多种实现方式及其应用】
  • docker需要sudo才能使用
  • 【canvas】一键自动布局:如何让流程图节点自动找到最佳位置
  • 目标检测YOLO实战应用案例100讲-基于毫米波雷达与摄像头协同的道路目标检测与识别(续)
  • 【Linux笔记】动态库与静态库的理解与加载
  • 轻量级模块化前端框架:快速构建强大的Web界面
  • Grounding DINO: 将DINO与接地预训练结合用于开放集目标检测
  • OPPO手机怎么更改照片天空?照片换天空软件推荐
  • 【开源宝藏】30天学会CSS - DAY2 第二课 Loader Ring Demo