Git 入门指南

什么是 Git?

Git 的目前最流行的分布式版本控制软件,可以帮助我们高效敏捷的处理任何项目。

版本管理

要理解 Git 我们首先要理解版本管理。
版本管理就是开发过程中用于管理对文件、目录或者工程等内容的修改历史,可以让我们方便的查看历史记录,备份和恢复以前版本的软件工程技术。

作用

有了版本控制可以做到什么呢?下面来看一下它的应用场景:

  1. 实现跨区域的多人合作开发:我们可以将代码保存到本地仓库,不需要连接服务器就能实现修改,并且通过远程仓库实现跨区域开发。
  2. 追踪和记载一个或者多个文件的历史记录,方便我们查看这个版本的修改内容。
  3. 组织和保护源代码和源文档
  4. 统计工作量、实现并行开发、提高开发效率
  5. 追踪记录整个软件的开发过程
  6. 减轻开发人员负担,节省时间,同时降低人为引发的错误,通过回滚我们可以快速的返回上个版本,来降低损失。

版本控制的分类

  1. 本地版本控制:记录文件每次的更新,对每个版本做一个快照,或者是记录补丁文档,适合个人使用
    image.png
  2. 集中式版本控制:将版本数据存储在服务器上,协同开发的人员从服务器上同步更新和上传自己的修改,用户本地只有之前同步的版本,不联网的话就无法得到历史版本。集中式版本控制数据都存储在单一的服务器上,一旦这个服务器损坏就有极大的风险,需要定期备份。
    image.png

分布式版本控制

  1. 所有版本信息的仓库全都存储到本地的每个用户。
  2. 可以在本地查看所有的版本历史,可以离线在本地提交,只需要联网的适合 push 到响应的服务器。
  3. 每个用户保存了所有的版本信息,换言之每个用户的本地数据都是一个仓库
  4. 不会因为服务器出现问题就导致工作停滞的情况

它的代表软件就是今天要说的 Git
image.png

Git 的下载与安装

Git 官网:https://git-scm.com/

安装

  1. 一直下一步即可,建议安装到非系统盘
  2. 安装的路径不要带中文、空格、特殊字符

常用资料

Git 大全:https://gitee.com/all-about-git
Git 互动学习:https://oschina.gitee.io/learn-git-branching/

Git 基本配置

常用指令

  1. 设置用户名和邮箱:使用 Git 前需要设置用户名和邮箱,每次提交的时候都会使用到这个信息
git config --global user.name "Your Name"
git config --global user.email "YourEmali"
  1. 查看配置的指令
# 查看所有配置
git config -l
# 查看当前用户的配置
git config --global -l
# 查看系统配置
git config --system -l

Git 的配置文件

  1. System 配置文件:位于 Git 安装目录下的 .gitconfig
  2. Global 全局文件:位于 C 盘下的 .gitConfig 只适用于当前用户的配置

Git 的工作原理(重点)

Git 的四个工作区域

Git 在本地有三个工作区域:工作目录、暂存区、资源库,再加上远程的 git 仓库就可以分为四个工作区域,文件在这四个区域之间转换关系如下
image.png

  1. Working Directory:工作目录,平时存放项目代码的地方
  2. Stage(Index):暂存区,用于暂时存放你的改动,事实上它只是一个文件,保存即将提交的文件的列表信息。
  3. Repository:仓库区(也可以叫本地仓库),就是安全存放数据的位置,这里有所有版本的数据,其中 Head 指向最新放入仓库的版本。
  4. Remote Directory:远程仓库,用户托管代码的服务器,比如 GitHub 或者 Gitee,可以简单的认为是远程存放数据的用户。

Git 的工作流程

  1. 在工作目录中对文件进行修改操作
  2. 将需要进行版本管理的文件放入暂存区域
  3. 将暂存区域的文件提交到本地的 Git 仓库

由上面的三个步骤,Git 管理的文件有三种状态:已修改、已暂存和已提交
image.png

Git 仓库的创建

创建工作目录的常用指令

工作目录一般就是你希望 Git 来管理的文件夹,可以是项目的目录,可以是空目录,但注意不要有中文。
image.png

创建本地仓库

这里来演示使用一个空文件夹作为我们的本地仓库

  1. 在本地创建一个空目录,在目录下点击右键,选择显示更多选项
    image.png
  2. 执行 git-init 命令,执行后会发现目录中多出了一个 .git 目录,关于版本等的信息都在这个目录里面。需要注意的是这个目录默认是隐藏的,需要打开显示隐藏的项目这个选项。
  3. 这样我们就在本地创建了一个仓库,并且将其交给 git 管理

克隆远程仓库

  1. 执行代码 git clone [url],可以将远程服务器上的仓库完全镜像复制一份到本地。
  2. 以 Gitee 平台为例,点击克隆即可获取 url 地址。

Git 文件管理

我们上面说的三种状态是 Git 管理的文件的状态,与这里说的文件做区分

Git 仓库下文件的四种文件状态

  1. Untracked:此文件在目录中,但是没有加入到 Git 库,不参与版本的控制,通过 git add 可以将它的状态变为 Staged
  2. Unmodify:文件已经入库,但是没有被修改过,也就是和本库中文件的快照内容完全一致,这些文件有两种处理方式:如果他被修改就会变为 Modified,我们可以使用git rm将其移出版本库,这时候他就会编程 Untracked。
  3. Modified:文件已经修改,但还未对其执行任何 Git 的操作,这种文件也有两种去处:通过 git add将其变为 Stage 状态,使用 git checkout从库中取出文件覆盖掉当前的修改,退回到 Unmodify。
  4. Stage:暂存状态,执行 git commit将其同步到库中,这时候库中的文件和本地的文件变为一致,这些文件退回 Unmodify 状态,我们也可以使用
    git reset HEAD filename将这个文件取消暂存,文件的状态为 Modify

文件操作指令

# 产看文件的状态,去掉文件名就是查看所有文件的状态
git status [filename]
# 添加文件到暂存区,去掉文件名就是所有文件
git add [filename]
# 提交暂存区中的内容到本地仓库
git commit -m

忽略文件

既然版本控制这么方便,为什么我们还要让一些文件被忽略呢?
我们来看一些不需要被纳入版本控制的文件,比如数据库文件、临时文件、设计文件,这些是不需要进行版本控制的,可以被忽略。
来看一下具体的实现:

  1. 在主目录下面创建 .gitignore,此文件的默认执行规则为:忽略文件中的空行或者 # 开始的行
  2. 支持 Linux 通配符,比如 * 代表任意多个字符,?代表一个字符,方括号 [abc] 标识可选的字符范围,大括号 {string1, string2, …} 表示可选的字符串
  3. 如果名称前面有感叹号,标识除了 xxx 以外,这个 xxx 将不会被忽略
  4. 如果名称前面是一个路径分隔符,表示忽略 .gitignore 文件所在的目录下的文件

对于这些我们只需要记住一些常用的,其他查看文档即可

# 忽略所有以 java 结尾的文档
*.java
# my.java 除外
!my.java

利用 Gitee 创建代码仓库

创建仓库

Gitee 官网:https://gitee.com/
注册好后我们就可以创建我们的仓库了
image.png

绑定密钥

一般来说我们开发项目都是私密项目,这时候我们执行一些操作的时候就需要登录 Gitee 来验证我们的身份,可以通过给本机绑定 SSH 公钥的操作实现免密登录

  1. 打开 C:\Users\lenovo.ssh 文件,没有就手动创建该文件夹
  2. 检查文件夹中是否有这两个文件:
    image.png
    如果有的话可以先删除,通过在本文件下执行 ssh-keygen 即可(一直回车就行)
  3. 将公钥的信息添加到 Gitee 账户,在设置中找到公钥选项
    image.png
  4. 将 id_rsa.pub 中的信息复制到文本框即可

IDEA 集成 Git

需求

将我们刚刚创建好的仓库拉到本地的用 IDEA进行编辑

操作

  1. 新建文件中可以选择来自版本控制的项目
    image.png
  2. image.png
    输入正确的地址,这时候就可以将代码拉取到本地了,同时我们也绑定了这个远程仓库,可以在有权向的情况下将我们的代码提交到远程仓库了。
  3. 新建一个模块来测试 Git 的提交
    image.png
  4. image.png
    这里我们使用提交就可以将代码提交到本地的仓库,其实执行的就是git commit -m指令
  5. image.png
    如果只点击提交那就是提交到本地仓库,如果是提交并推送的话就会同时推送到远程仓库,这时候我们再去看远程仓库的界面就会发现多了这个文件
    image.png

Git 分支管理

分支

在 Git 中,分支是指向 Git 仓库中某个提交对象的可变指针。每个分支都是一个引用,指向你项目中的某个提交。默认情况下,新创建的仓库会有一个主分支,通常叫做 master,指向最新的提交。你可以创建新的分支,并在这些分支上进行工作,而不影响主分支。

分支的作用

  1. 并行开发: 分支使得团队成员可以在不互相干扰的情况下并行工作。每个开发者都可以在自己的分支上进行修改,而不会影响到主分支或其他开发者的工作。
  2. 特性开发: 分支可以用来开发新的特性或功能。你可以创建一个新分支,专门用于实现某个特定的功能,而不会影响主分支上的其他代码。一旦新特性完成,你可以将其合并回主分支。
  3. 版本控制: 每个分支代表着项目的一个不同状态。通过创建不同的分支,你可以在不同的分支上进行不同的修改和实验,从而更好地控制项目的版本。
  4. Bug 修复: 如果在主分支上发现了 bug,你可以创建一个新分支来进行修复,而不会干扰正在进行的其他工作。修复完成后,可以将修复合并回主分支。
  5. 实验性工作: 有时候,你可能想要尝试一些实验性的修改,但不确定是否应该将其合并到主分支。通过在新分支上进行实验,你可以更轻松地决定是否保留这些修改。

分支合并

image.png

  1. 分支可以有多个(根据业务需求)
  2. 如果各分支没有交集就会始终平行发展
  3. 如果两个分支需要合并,就执行 merge 操作

Git 分支指令

# 列出所有本地分支
git branch
# 列出所有远程分支
git branch -r
# 列出所有本地和远程分支
git branch -a
# 新建一个分支,但仍停留在当前分支
git branch [branch-name]
# 新建一个分支,并且切换到该分支
git checkout -b [branch]
# 新建一个分支,指向指定的 commit
git branch [branch] [commit]
# 新建一个分支,与指定的远程分支建立追踪挂你先
git branch --track [branch] [remote-branch]
# 切换到指定分支并更新工作区
git checkout [branch-name]
# 切换到上一个分支
git checkout -
# 在现有的分支和远程分支之间建立追踪关系
git branch --set-upstream [branch] [remote-branch]
# 合并分支到当前分支
git merge [branch]
# 选择一个 commit,合并进当前分支
git cherry-pick [commit]
# 删除分支
git branch -d [branch]
# 删除远程分支
git push origin --delete [branch]
git branch -dr [branch]

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

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

相关文章

java学习part20内部类

116-面向对象(高级)-类的成员之五:内部类_哔哩哔哩_bilibili 1.内部类

在Anaconda中用命令行安装环境以及安装包

一、下载Anaconda 下载地址 二、创建环境 1. 打开Anaconda命令行 2.创建环境 conda create -n 环境名称 python3.10(需要的python版本号) 3.激活环境 activate 环境名4.下载安装包 pip install 模块名 -i https://pypi.tuna.tsinghua.edu.cn/simple5.下载torch 官网&…

Python语言学习笔记之三(字符编码)

本课程对于有其它语言基础的开发人员可以参考和学习,同时也是记录下来,为个人学习使用,文档中有此不当之处,请谅解。 什么是字符编码 计算机从本质上来说只认识二进制中的0和1,字符编码(Character Encoding) 是一种将…

【JavaScript框架】Vue与React中的组件框架概念

组件框架是用于构建应用程序的工具,以便将UI和逻辑划分为单独的可重用组件。目前的组件框架包括React、Vue、Angular、Ember、Svelte等。 Vue和React使用了常见的框架概念,如处理状态、道具、引用、生命周期挂钩、事件等。这两个框架在当今的web开发中被…

项目中高并发如何处理

在项目中处理高并发主要需要考虑以下几个方面的策略: 优化数据库设计:使用合适的数据结构、索引和查询优化技术可以显著提高数据库的响应性能;分库分表使用缓存:缓存是一种非常有效的处理高并发的方法。通过将常用的数据或结果保…

Spring源码解读之创建bean

本文章我们会解读一下Spring如何根据beanDefinition创建bean的; 代码入口: AnnotationConfigApplicationContext applicationContext new AnnotationConfigApplicationContext(AppConfig.class);applicationContext.refresh(); 当spring执行refresh(…

Jmeter+influxdb+grafana监控平台在windows环境的搭建

原理:Jmeter采集的数据存储在infuxdb数据库中,grafana将数据库中的数据在界面上进行展示 一、grafana下载安装 Download Grafana | Grafana Labs 直接选择zip包下载,下载后解压即可,我之前下载过比较老的版本,这里就…

在 The Sandbox 设置总部,SCB 10X 和 T-POP 为 4EVE 元宇宙音乐会揭幕

协作学习为全球粉丝提供了无限的可能性,让他们通过革命性的元宇宙体验沉浸在泰国流行文化中。 作为 SCBX 集团背后的创新力量,SCB 10X 很高兴宣布与 T-POP Incorporation 展开开创性合作,T-POP Incorporation 是泰国流行文化在全球舞台上的领…

鸿蒙开发已成新趋势

随着华为鸿蒙操作系统的快速崭露头角,鸿蒙开发已然成为当前技术领域的热门新趋势。本文将深入探讨鸿蒙开发的重要性和独特优势,并详细介绍一些关键的鸿蒙开发技术和工具,以及它们对开发者个人和整个行业带来的深远影响。 首先,鸿蒙…

入侵redis之准备---VMware安装部署kail镜像服务器【详细包含云盘镜像】

入侵redis之准备—VMware安装部署kail镜像服务器【详细包含云盘镜像】 kail是一个很好玩的操作系统,不多说了哈 下载kail镜像 kail官网:https://www.kali.org/get-kali/#kali-platforms 百度云盘下载: 链接:https://pan.baidu.com/s/1PRjo…

具身智能17篇创新性论文及代码合集,2023最新

今天来聊聊人工智能领域近期的一个热门研究方向——具身智能。 具身智能(Embodied Intelligence)指的是机器人或智能体通过感知、理解和交互来适应环境,并执行任务的能力。与传统的基于规则或符号的人工智能不同,具身智能强调将感…

基于springboot实现私人健身与教练预约管理系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现私人健身与教练预约管理系统演示 摘要 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应…

hello vtk 圆柱

VTK 可视化的流程及步骤 标题引入VTK库和初始化: 引入 VTK 库和 AutoInit 模块,以便使用 VTK 的渲染和交互功能 设置背景颜色和颜色对象: 使用 vtkNamedColors 设置背景颜色和演员颜色。 创建圆柱体源: 使用 vtkCylinderSou…

蓝桥杯-01简介

文章目录 蓝桥杯简介参考资源蓝桥杯官网第15届大赛章程一、概况(一)大赛背景和宗旨(二)大赛特色(三)大赛项目1.Java软件开发2.C/C程序设计3.Python程序设计4.Web应用开发5.软件测试6.网络安全7.嵌入式设计与…

可视化文件编辑与SSH传输神器WinSCP如何公网远程本地服务器

可视化文件编辑与SSH传输神器WinSCP如何公网远程本地服务器 文章目录 可视化文件编辑与SSH传输神器WinSCP如何公网远程本地服务器1. 简介2. 软件下载安装:3. SSH链接服务器4. WinSCP使用公网TCP地址链接本地服务器5. WinSCP使用固定公网TCP地址访问服务器 1. 简介 …

CH02_交给子类

Template Method模式 组成模板的方法被定义在父类中,由于这些方法是抽象方法,所以只查看父类的代码是无法知道这些方法最终会进行何种具体处理的。唯一能知道的就是父类如何调用这些方法。 类图 说明 AbstractClass(抽象类) Abs…

vue项目中通过vuex管理数据

目录 1.前言: 2.vuex的基础用法: 1.构建与挂载vue 基础模板渲染 构建仓库 2.mutations的使用 1.介绍 ​编辑 2.案列: 3.传参 4.辅助函数mapMutations: 3.module分对象的写法 介绍 建立模块: 访问数据的方…

【VROC】看Intel VROC如何给NVMe SSD做RAID

在当今对硬盘性能要求越来越高的环境中,SATA和SAS接口由于自身的限制,其性能很难突破600MiB/s的瓶颈。因此,对于需要更高底层硬件性能的行业,如数据库等,对NVMe盘的需求越来越迫切。然而,NVMe盘直通到CPU&a…

三种常见的哈希结构

1.数组 2.set 使用序引用set头文件 unordered_set需引用unordered_set 3.map unordered_map需引用unordered_map头文件

error: ‘PixelPacket’ in namespace ‘Magick’ does not name a type

最近做一个项目需要配置ImageMagick库,本项目配置环境如下: ImageMagick version 7 Operating system, version and so on ubuntu 20.04 Descriptionerror: ‘PixelPacket’ in namespace ‘Magick’ does not name a type 这是在运行程序时候出现的问题…