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

版本控制工具之Git的基础使用教程

Git

Git是一个分布式版本控制系统,由Linux之父Linus Torvalds 开发。它既可以用来管理和追踪计算机文件的变化,也是开发者协作编写代码的工具。

本文将介绍 Git 的基础原理、用法、操作等内容。

一、基础概念

1.1 版本控制系统

版本控制系统(Version Control System,VCS)是一种管理代码或文档变更的软件。VCS 可以帮助开发者记录、查看、比较、合并和恢复文件的版本。常见的 VCS 有 Git、Subversion(SVN)、Perforce 等。

1.2 Git

Git 是一个开源的分布式版本控制系统,由 Linus Torvalds 于 2005 年创建。与集中式版本控制系统不同,Git 是一种分布式版本控制系统,意味着每个开发者都拥有一个完整的代码库,可以在本地进行代码的版本控制和修改。与其他 VCS 相比,Git 具有以下优势:

  • 高效性:Git 使用一种名为快照(Snapshot)的方式来存储版本,而不是基于差异的方式,因此在合并分支等操作上更加高效。
  • 分布式:与集中式版本控制系统不同,每个Git工作目录都是一个完整的仓库,拥有完整的历史记录和版本追踪能力,不依赖于网络连接或中心服务器。
  • 分支管理:Git的一个核心特点是强大的分支管理系统。在Git中创建新的分支、合并分支、删除分支都非常简单,极大提高了开发者进行并行开发的效率。
  • 安全性:Git 有完整的 SHA-1 哈希校验机制,保证文件内容不被篡改。
  • 开源: Git是免费和开放源代码的,任何人都可以查阅代码来了解其工作原理或者根据需求进行修改。

1.3 Git 的工作流程

Git 的工作流程可以分为三个阶段:工作目录(Working Directory)、暂存区(Staging Area)和版本库(Repository)。其中,工作目录是指本地的工作区,用于进行开发工作,暂存区是一个缓存区,用于存放待提交的修改,版本库则是存放完整历史版本的地方。

工作区(Working Directory):这是你电脑上可见的,实际处理的文件。这些文件可能是已经修改的或尚未加入Git的版本控制。

暂存区(Staging Area 或 Index):英文叫 stage 或 index。一般存放在 .git 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。通过git add 命令可以增加文件到暂存区,使用 git rm 命令可以从暂存区删除文件,使用 git commit 命令, 将暂存区的文件提交到Git仓库。

版本库:工作区有一个隐藏目录 .git,这个不算工作区,而是 Git 的版本库。

下面是一个简单的 Git 工作流程示意图:

二、Git 的安装和配置

2.1 Git 的安装

在 Windows 和 macOS 系统中,可以直接从 Git 官网下载安装程序进行安装(这里就不讲解了因为网上有很多安装教程)。在 Linux 系统中,可以使用系统包管理器进行安装,例如在 Ubuntu 系统中,可以使用以下命令进行安装:

$ sudo apt-get update
$ sudo apt-get install git

2.2 Git 的配置

安装完 Git 后,需要进行一些基本的配置,可以通过以下命令设置用户名和邮箱:

$ git config --global user.name "Your Name"
$ git config --global user.email "your.email@example.com"

还可以通过以下命令来设置默认文本编辑器和比较工具:

$ git config --global core.editor vim
$ git config --global merge.tool vimdiff

三、Git 的常用命令

3.1 创建仓库

在 Git 中,可以使用 git init 命令创建一个新的仓库。

例如,要在当前目录下创建一个名为 myrepo 的新仓库,可以使用以下命令:

$ mkdir myrepo
$ cd myrepo
$ git init

3.2 添加文件

在 Git 中,可以使用 git add 命令将文件添加到暂存区。例如,要将当前目录下的 index.html 文件添加到暂存区,可以使用以下命令:

$ git add index.html

如果要将当前目录下的所有文件添加到暂存区,可以使用以下命令:

注意一定要加后边的 “点”

$ git add .

3.3 提交修改

在 Git 中,可以使用 git commit 命令将暂存区的修改提交到版本库中。

例如,要将暂存区的修改提交并添加一条提交信息,可以使用以下命令:

$ git commit -m "Add index.html"

3.4 查看状态

在 Git 中,可以使用 git status 命令查看当前仓库的状态。

例如,要查看当前仓库的状态,可以使用以下命令:

$ git status

3.5 查看提交历史

在 Git 中,可以使用 git log 命令查看提交历史。

例如,要查看当前仓库的提交历史,可以使用以下命令:

$ git log

3.6 分支管理

在 Git 中,可以使用 git branch 命令管理分支。

例如,要创建一个名为 dev 的新分支,可以使用以下命令:

bash
$ git branch dev

要切换到 dev 分支,可以使用以下命令:

$ git checkout dev

3.7 合并分支

在 Git 中,可以使用 git merge 命令将一个分支的修改合并到当前分支中。

例如,要将 dev 分支的修改合并到当前分支中,可以使用以下命令:

$ git merge dev

3.8 撤销修改

在 Git 中,可以使用 git checkout 命令撤销对文件的修改。

例如,要撤销对 index.html 文件的修改,可以使用以下命令:

$ git checkout index.html

3.9 远程仓库

在 Git 中,可以使用 git remote 命令管理远程仓库。

例如,要添加一个名为 origin 的远程仓库,并将其指向一个 URL,可以使用以下命令:

$ git remote add origin https://github.com/username/myrepo.git

要将本地仓库的修改推送到远程仓库,可以使用以下命令:

$ git push origin master

其中 origin 是远程仓库的名称,master 是要推送到远程仓库的分支名称。

要从远程仓库中获取最新的代码,可以使用以下命令:

$ git pull origin master

其中 origin 是远程仓库的名称,master 是要拉取的分支名称。

3.10 其他常用命令

git clone:从远程仓库克隆一个本地仓库。

git diff:查看两个版本之间的差异。

git reset:撤销最近的提交,并将修改移动到暂存区。

git revert:撤销指定的提交,并创建一个新的提交来表示该撤销操作。

四、Git 的工作流程

Git 的工作流程包括以下几个步骤:

  1. 初始化仓库:使用 git init 命令将当前目录初始化为一个 Git 仓库。

  2. 添加文件:使用 git add 命令将修改的文件添加到本地仓库的暂存区中。

  3. 提交变化:使用 git commit 命令将暂存区中的修改提交到本地仓库中,并创建一个新的版本记录。

  4. 查看状态:使用 git status 命令查看当前仓库的状态,包括已修改的文件、已添加到暂存区的文件、未跟踪的文件等。

  5. 查看日志:使用 git log 命令查看当前仓库的提交历史记录,包括作者、时间戳、提交说明等信息。

  6. 远程操作:使用 git remote 命令管理远程仓库,并使用 git pushgit pull 命令与远程仓库进行同步操作。

  7. 分支管理:使用 git branch 命令创建、查看、切换和删除分支,以支持并行开发和版本控制。

  8. 解决冲突:当多个开发者同时修改同一个文件时,可能会产生冲突。使用 git mergegit rebase 命令解决冲突,将修改合并到一个版本中。

以下是一个典型的 Git 工作流程示例:

#从远端仓库克隆项目到自己电脑
$ git clone https://github.com/username/myrepo.git
$ cd myrepo
# 在本地仓库中进行修改
$ git add .
$ git commit -m "Add new feature"
$ git push origin master
# 从远程仓库中拉取最新的代码
$ git pull origin master

五、常见问题解答

6.1 如何解决冲突?

在协作开发过程中,当两个开发者修改了同一个文件的同一行代码时,就会发生冲突。解决冲突的方法通常有以下几种:

手动解决冲突:手动合并两个开发者的代码,并提交修改到版本库中。

使用 Git 的合并工具:Git 自带了合并工具,可以使用以下命令进行合并:git mergetool

使用 Git 的补丁功能:可以使用以下命令将差异保存为补丁文件,然后将补丁文件发送给其他开发者进行合并:git diff > patchfile

6.2 如何撤销提交?

如果提交的代码有问题,可以使用以下命令进行撤销:

撤销最近的提交,并将修改移动到暂存区:git reset HEAD~

撤销最近的提交,并将修改移动到工作目录:git reset HEAD~ --hard

6.3 如何删除文件?

要删除文件,可以使用以下命令:

$ git rm filename
$ git commit -m "Delete filename"
$ git push origin master

其中 filename 是要删除的文件名称。

6.4 如何切换分支?

要切换分支,可以使用以下命令:

$ git checkout branchname

其中 branchname 是要切换到的分支名称。

6.5 如何创建标签?

要创建标签,可以使用以下命令:

$ git tag -a v1.0 -m "Version 1.0"
$ git push origin v1.0

其中 v1.0 是标签名称,Version 1.0 是标签说明。

6.6 如何查看提交历史?

要查看提交历史,可以使用以下命令:

$ git log

该命令会列出所有的提交历史记录,包括提交 ID、提交者、提交时间、提交说明等信息。

六、总结

Git 是一款强大的版本控制工具,可以帮助开发人员管理代码、协作开发以及备份代码等任务。本文介绍了 Git 的原理、用法和常用命令,并且介绍了 Git 的工作流程。希望本文对初学者能够提供帮助,让大家能够更好地使用 Git。

相关文章:

版本控制工具之Git的基础使用教程

Git Git是一个分布式版本控制系统,由Linux之父Linus Torvalds 开发。它既可以用来管理和追踪计算机文件的变化,也是开发者协作编写代码的工具。 本文将介绍 Git 的基础原理、用法、操作等内容。 一、基础概念 1.1 版本控制系统 版本控制系统&#x…...

五子棋对战(网页版)

目录 一、项目背景 用户模块 匹配模块 对战模块 二、核心技术 三、相关知识 WebSocket 原理 报文格式 代码 服务器代码 客户端代码 四、项目创建 4.1、实现用户模块 编写数据库代码 数据库设计 配置MyBatis 创建实体类 创建UserMapper 创建UserMapper接口 实现UserMapper.xml 前…...

在 Ubuntu系统中,可以使用以下几种方法查看网络速率

1 使用终端命令:可以使用ifconfig命令查看网络接口的信息,包括网络接口名称、IP地址、子网掩码等。也可以使用nload命令查看网络流量和传输速率。 2 使用网络监控工具:例如nethogs,可以更加直观地查看网络吞吐量。 3 使用网络测…...

这是摆脱困境的最好方法

20多年前,我开始涉足创业,经历过的那种停滞感我都记不清了。这是这条职业道路上最常见的挣扎之一,而且很难摆脱。 卡住的城市是一个地方,任何有创造力的,自由职业者和好奇的人经常去。这是一个很难逃离的地方。 被困…...

OceanBase 中的ROWID与Oracle的差异与如何迁移

1. ROWID 1.1 OB和Oracle中rowid的区别 正如大家所知道的,OceanBase兼容Oracle的rowid特性,但在其生成规则上却存在不同,具体表现如下: OceanBase ● 定义:OceanBase(简称 OB)的rowid是通过…...

秋招后端开发面试题 - JVM运行时数据区

目录 运行时数据区前言面试题JVM 内存区域 / 运行时数据区?说一下 JDK1.6、1.7、1.8 内存区域的变化?为什么使用元空间替代永久代作为方法区的实现?Java 堆的内存分区了解吗?运行时常量池?字符串常量池了解吗&#xff…...

【YOLOv8改进[Backbone]】使用SCINet改进YOLOv8在黑暗环境的目标检测效果

目录 一 SCINet 1 本文方法 ① 权重共享的照明学习 ② 自校准模块 ③ 无监督训练损失 二 使用SCINet助力YOLOv8在黑暗环境的目标检测效果 1 整体修改 2 配置文件 3 训练 其他 一 SCINet 官方论文地址:https://arxiv.org/pdf/2204.10137 官方代码地址&…...

ASE docker related research

ASE 2022 Understanding and Predicting Docker Build Duration: An Empirical Study of Containerized Workflow of OSS Projects 理解和预测 Docker 构建持续时间:OSS 项目容器化工作流程的实证研究 Docker 构建是容器化工作流程的关键组成部分,它…...

maven .lastUpdated文件作用

现象 有时候我在用maven管理项目时会发现有些依赖报错,这时你可以看一下本地仓库中是否有.lastUpdated文件,也许与它有关。 原因 有这个文件就表示依赖下载过程中发生了错误导致依赖没成功下载,可能是网络原因,也有可能是远程…...

gtest的编译与使用

文章目录 gtest的编译与使用概述笔记CMake参数官方文档测试程序测试效果END gtest的编译与使用 概述 gTest是 googletest的缩写,如果直接找gTest项目,是找不到的。 库地址 https://github.com/google/googletest.git 迁出到本地后,切到最新…...

【 npm详解:从入门到精通】

文章目录 npm详解:从入门到精通1. [npm](https://www.npmjs.com/)的安装2. npm的基础用法2.1 初始化项目2.2 安装依赖2.3 卸载依赖2.4 更新依赖 3. npm的高级用法3.1 运行脚本3.2 使用npm scope3.3 使用npm link 4. npm资源5. 使用npm进行依赖树分析和可视化6. npm进…...

【Web后端】实现文件上传

表单必须使用post提交 ,enctype 必须是multipart/form-data在Servlet上填加注解 MultipartConfiglocation :默认情况下将存储文件的目录,默认值为“”。maxFileSize :允许上传文件的最大大小,其值以字节为单位。 默认值为-1L表示无…...

react 逻辑 AND 运算符 ()

在 React 组件中&#xff0c;当你想在条件为 true 时渲染一些 JSX 时&#xff0c;它经常会出现&#xff0c;或者什么都不渲染。使用 &#xff0c;只有在以下情况下才能有条件地呈现复选标记&#xff1a;&&isPackedtrue return (<li className"item">{…...

Redis详解(二)

事务 什么是事务&#xff1f; 事务是一个单独的隔离操作&#xff1a;事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中&#xff0c;不会被其他客户端发送来的命令请求所打断。 事务是一个原子操作&#xff1a;事务中的命令要么全部被执行&#xff0c;要么全部都…...

嵌入式:基于STM32的智能家居照明控制系统

在智能家居系统中&#xff0c;自动照明控制不仅提高了居住舒适度&#xff0c;还有助于节能减排。本教程旨在引导读者通过使用STM32微控制器来开发一个智能照明控制系统。该系统能够根据环境光线自动调整室内照明的亮度&#xff0c;并支持通过简单的用户界面手动控制光线。 一、…...

三种基本排序-冒泡,选择,二分

闲话不多说&#xff0c;直接上代码&#xff0c;简明易懂&#xff0c;条理清晰&#xff0c;交互性强&#xff0c;尽善尽美 码住&#xff0c;建议copy下来&#xff1a; 先上二分法吧&#xff0c;稍复杂点的&#xff0c;代码多一些&#xff0c;用了函数调用 二分排序&#xff1…...

windows查找重复的物理地址

单独查询所有物理&#xff08;mac&#xff09;地址&#xff08;cmd执行&#xff09;&#xff1a;arp -a 查找同一局域网下重复的mac&#xff0c;打开power shell执行以下命令&#xff1a; Get-NetNeighbor | Where-Object { $_.State -eq "Reachable" } | Select-O…...

linux进阶高级配置,你需要知道的有哪些(8)-shell脚本应用(三)

1、for循环语句的结构&#xff1a; for 变量名 in 取值列表 do 命令序列 done 2、while循环语句结构&#xff1a; while 条件测试 do 命令序列 done 3、for和while的区别 for:控制循环来自于取值列表 while&#xff1a;控制循环来自于条件测试 4、case语句的…...

安全测试|常见SQL注入攻击方式、影响及预防

SQL注入 什么是SQL注入&#xff1f; SQL注入是比较常见的网络攻击方式之一&#xff0c;主要攻击对象是数据库&#xff0c;针对程序员编写时的疏忽&#xff0c;通过SQL语句&#xff0c;实现无账号登录&#xff0c;篡改数据库。 SQL注入简单来说就是通过在表单中填写包含SQL关键…...

【Git】Git在Gitee上的基本操作指南

文章目录 1. 查看 git 版本2. 从Gitee克隆仓库&#xff1a;3. 复制文件到工作目录&#xff1a;4. 将未跟踪的文件添加到暂存区&#xff1a;5. 在本地提交更改&#xff1a;6. 将更改推送到远程仓库&#xff08;Gitee&#xff09;&#xff1a;7. Windows特定提示&#xff1a; 1. …...

基于Uniapp开发HarmonyOS 5.0旅游应用技术实践

一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架&#xff0c;支持"一次开发&#xff0c;多端部署"&#xff0c;可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务&#xff0c;为旅游应用带来&#xf…...

C++ 基础特性深度解析

目录 引言 一、命名空间&#xff08;namespace&#xff09; C 中的命名空间​ 与 C 语言的对比​ 二、缺省参数​ C 中的缺省参数​ 与 C 语言的对比​ 三、引用&#xff08;reference&#xff09;​ C 中的引用​ 与 C 语言的对比​ 四、inline&#xff08;内联函数…...

TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案

一、TRS收益互换的本质与业务逻辑 &#xff08;一&#xff09;概念解析 TRS&#xff08;Total Return Swap&#xff09;收益互换是一种金融衍生工具&#xff0c;指交易双方约定在未来一定期限内&#xff0c;基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...

Spring Boot面试题精选汇总

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

ABAP设计模式之---“简单设计原则(Simple Design)”

“Simple Design”&#xff08;简单设计&#xff09;是软件开发中的一个重要理念&#xff0c;倡导以最简单的方式实现软件功能&#xff0c;以确保代码清晰易懂、易维护&#xff0c;并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计&#xff0c;遵循“让事情保…...

2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)

安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...

uniapp 实现腾讯云IM群文件上传下载功能

UniApp 集成腾讯云IM实现群文件上传下载功能全攻略 一、功能背景与技术选型 在团队协作场景中&#xff0c;群文件共享是核心需求之一。本文将介绍如何基于腾讯云IMCOS&#xff0c;在uniapp中实现&#xff1a; 群内文件上传/下载文件元数据管理下载进度追踪跨平台文件预览 二…...

LLaMA-Factory 微调 Qwen2-VL 进行人脸情感识别(二)

在上一篇文章中,我们详细介绍了如何使用LLaMA-Factory框架对Qwen2-VL大模型进行微调,以实现人脸情感识别的功能。本篇文章将聚焦于微调完成后,如何调用这个模型进行人脸情感识别的具体代码实现,包括详细的步骤和注释。 模型调用步骤 环境准备:确保安装了必要的Python库。…...

[特殊字符] 手撸 Redis 互斥锁那些坑

&#x1f4d6; 手撸 Redis 互斥锁那些坑 最近搞业务遇到高并发下同一个 key 的互斥操作&#xff0c;想实现分布式环境下的互斥锁。于是私下顺手手撸了个基于 Redis 的简单互斥锁&#xff0c;也顺便跟 Redisson 的 RLock 机制对比了下&#xff0c;记录一波&#xff0c;别踩我踩过…...

__VUE_PROD_HYDRATION_MISMATCH_DETAILS__ is not explicitly defined.

这个警告表明您在使用Vue的esm-bundler构建版本时&#xff0c;未明确定义编译时特性标志。以下是详细解释和解决方案&#xff1a; ‌问题原因‌&#xff1a; 该标志是Vue 3.4引入的编译时特性标志&#xff0c;用于控制生产环境下SSR水合不匹配错误的详细报告1使用esm-bundler…...