Git快速掌握,通俗易懂
Git分布式版本控制工具
介绍
Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。Git是由Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。Git可以帮助开发者们管理代码的版本,避免代码冲突,方便合并代码等。而在当下Git已经成为最重要的开发工具之一
什么是版本控制?
前面说了这么多,肯定会有博友会问,既然Git是一个版本控制工具,那版本控制又是什么呢?
版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。它可以帮助你管理项目中的文件、代码和数据,跟踪它们的变化,以及协同团队成员之间的工作。
举个例子,对于软件来说,我们所知的修图软件ps有2023版、2022版等不同版本,而代码编辑器vscode也有2021版、2019版等多个版本。这里所指的就是这些软件的版本。对于文件来说,版本控制也是非常重要的。无论是文档、图片还是代码文件,我们都可能需要创建不同版本的副本来追踪和管理变化。
举个例子,假设你正在编辑一份报告文档,你可能会经历多次修改和修订。每次修改后,你可以使用版本控制系统保存一个新的版本,以便随时回溯到之前的版本。这样,如果你发现某个修改有问题或者想要查看之前的更改,你可以轻松地找到并恢复到之前的版本。
另外,版本控制也可以用于团队协作。当多个人同时编辑同一个文件时,版本控制系统可以自动检测冲突并帮助解决。每个人所做的修改都会被视为不同的版本,系统会将它们合并在一起,确保最终的文件是完整且没有冲突的。
为什么要学习Git?
常见的版本控制工具有Git、Subversion(SVN)、Mercurial等,而Git因为其开源的特性已经是现在最流行的版本控制工具
Git不仅可以进行版本控制,还能将文件内容以及版本记录保存在远程服务器上。这样,无论你在哪里,只要有网络连接,就可以获取到你的项目文件,极大地提高了工作的便捷性。
虽然Git在存储空间上比SVN更占用空间,(因为Git在每个端都保留了所有的版本历史),但是其在流行程度、功能丰富方面却比SVN有优势。Git 相对于SVN不仅仅是个版本控制系统,它也是个内容管理系统,工作管理系统等。因此,学习Git无疑是一个值得的选择。
git工作原理 / 流程:
Workspace:工作区
Index / Stage:暂存区
Repository:仓库区(或本地仓库)
Remote:远程仓库
这个流程图描述了 Git 的常用命令之间的关系:
- 开发人员可以使用
git clone
从远程仓库克隆项目到本地。 - 他们可以使用
git push
将本地仓库的更改推送到远程仓库。 - 他们可以使用
git add
将文件添加到暂存区。 - 然后使用
git commit
将暂存区的更改提交到本地仓库。 - 使用
git checkout
可以在分支之间切换,以及创建新的分支。
git pull
命令包含在 git clone
和 git checkout
中,因为它用于从远程仓库拉取最新更改到本地仓库。
1. Git安装配置
在使用Git之前,我们需要先安装Git。Git目前支持在Linux/Unix、Solaris、Mac和Windows平台上运行。
Git的各平台安装包下载地址如下:https://git-scm.com/downloads
点击Windonws版本安装即可,完成安装之后,就可以使用命令行的 git 工具
我们点击右键这里会出现两个新的右键菜单,一个叫做Git GUI here,一个叫做Git Bash here。
- Git GUI here就是它自带的客户端工具
- Git Bash here是一个命令行窗口
基本配置
点击Git Bash here在命令行窗口进行一下配置
1.设置用户信息
用户名:
git config --global user.name "注册名"
邮箱:
git config --global user.email "注册邮箱"
2.查看配置信息
查看全局配置信息:
git config --global --list
这将列出全局配置信息,包括用户名、邮箱等。
2. 远程仓库配置
远程仓库有很多,比如github,国内的码云,局域网自建git服务器,托管在其他地方的服务器,本文以github为例
网址https://github.com没有注册的可以先去注册一下
新建仓库: 点击右上角,加号,new repository
下一步
填写完成后 点击右下发创建存储库
如,我已经建立好的仓库
3. 生成(配置)SSH
git客户端安装后,如何和远程仓库,如github连接呢?我们使用SSH。
SSH是Secure Shell的缩写,它是一种用于安全远程登录到计算机系统并在网络上传输数据的协议。SSH通过加密的方式保护数据在网络上传输的安全性,因此它广泛应用于远程管理和文件传输
我们刚注册完账号后还没有配置SSH密钥,我们先生成一个SSH
检查是否已有SSH密钥对:
在终端(Linux和macOS)或命令提示符(Windows)中运行以下命令来检查是否已经存在SSH密钥对:
ls -al ~/.ssh
如果已经存在密钥对,则会显示在该目录下。
生成SSH(以有SSH可以跳过这一步)
ssh-keygen -t rsa -C "自己的邮箱"
生成成功,如下图所示:
SSH文件存放在C:/User/用户/.ssh下
-
id_rsa: 这是你的SSH私钥文件。私钥文件用于身份验证,通常不应该泄露给其他人。
-
id_rsa.pub: 这是与私钥相关联的公钥文件。公钥文件可以与他人共享,以便他们将其添加到他们的服务器上,以允许你通过私钥进行身份验证
如果找不到C:/User/用户/.ssh
生成一个新的SSH密钥
打开 Git Bash,输入如下命令,然后连续按三个回车即可:
ssh-keygen -t rsa -C "你的邮箱"
然后会出来提示Enter file in which to save the key 后面是一个路径,你就会找到你想要的.ssh文件夹了,去电脑里找吧
github配置SSH
用记事本打开id_rsa.pub文件,全选,复制全文
打开github 点击右上角用户头像 点击设置 点击SSH密钥
点击New SSH key创建一个新SSH密钥
起一个标题,将之前复制的密钥粘贴上去
测试SSH连接,在控制台输入
ssh -T git@github.com
按照提示输入yes,回车,提示successfully之类的就说明SSH连接正常,github上的钥匙也会变成绿色
4. 推送文件到远程仓库
建立本地仓库
选择一个需要版本管理的项目文件夹,这里以我桌面的一个文件夹为例
打开文件夹右键 git bash中执行命令,将该文件夹初始化为一个仓库
git init
执行命令后文件夹内会出现一个隐藏的文件夹.git,没有的话,设置一下文件夹选项,显示隐藏文件
远程推送文件
基本流程:add->commit->push
-
添加并提交文件到本地仓库:
使用git add
命令将文件添加到暂存区,然后使用git commit
命令将文件提交到本地仓库:git add <文件名> git commit -m "提交信息"
-
连接到远程仓库:
如果还没有连接到远程仓库,你需要使用git remote add
命令添加远程仓库地址:git remote add origin <远程仓库URL>
其中
<远程仓库URL>
是你在GitHub上创建的仓库的地址。
-
推送本地提交到远程仓库:
一旦连接到了远程仓库,你可以使用git push
命令将本地提交推送到远程仓库:git push origin <分支名>
其中
<分支名>
是你要推送到的远程仓库的分支名称。如果想要首次推送到 master(主要分支),加上 -u 参数会将本地分支与远程分支关联起来。
git push -u origin master
提交成功
常用的Git命令及其用法
-
git init:初始化一个新的Git仓库。
git init
-
git clone:克隆现有仓库到本地。
git clone <仓库URL>
-
git add:将文件添加到暂存区。
git add <文件名>
-
git commit:将暂存区中的文件提交到本地仓库。
git commit -m "提交信息"
-
git status:查看当前工作区和暂存区的状态。
git status
-
git log:查看提交历史记录。
git log
-
git branch:列出本地分支,或者创建新分支。
git branch <分支名>
-
git checkout:切换分支。
git checkout <分支名>
-
git merge:合并指定分支到当前分支。
git merge <要合并的分支>
-
git pull:拉取远程仓库的变化并合并到本地。
git pull origin <分支名>
-
git push:推送本地变化到远程仓库。
git push origin <分支名>
-
git remote -v:查看远程仓库的信息。
git remote -v
-
git remote add:添加一个新的远程仓库。
git remote add <远程仓库名> <仓库URL>
-
git remote remove:移除指定的远程仓库。
git remote remove <远程仓库名>
-
git diff:查看工作区与暂存区的差异。
git diff
这些是Git中一些常见的命令,但Git还提供了许多其他功能强大的命令,可以根据实际需要查阅Git官方文档或者通过 git --help
查看帮助信息。
结语
Git是一个强大的版本控制系统,通过掌握上述基本概念和常用命令,你可以更好地管理和协作项目代码。除了本文介绍的内容,Git还有许多高级功能和技巧,可以根据实际需求进行学习和探索。希望本文能够帮助你快速入门Git,并在日常开发中得到应用。
相关文章:

Git快速掌握,通俗易懂
Git分布式版本控制工具 介绍 Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。Git是由Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。Git可以帮助开发者们管理代码的版本,避免代码冲突&#…...

PHP毕业设计图片分享网站76t17
图片分享网站主要是为了提高工作人员的工作效率和更方便快捷的满足用户,更好存储所有数据信息及快速方便的检索功能,对系统的各个模块是通过许多今天的发达系统做出合理的分析来确定考虑用户的可操作性,遵循开发的系统优化的原则,…...

代码随想录 Leetcode45. 跳跃游戏 II
题目: 代码(首刷看解析 2024年2月15日): class Solution { public:int jump(vector<int>& nums) {if (nums.size() 1) return 0;int res 0;int curDistance 0;int nextDistance 0;for (int i 0; i < nums.size(); i) {nex…...

【C语言】socketpair 的系统调用
一、 Linux 内核 4.19socketpair 的系统调用 SYSCALL_DEFINE4(socketpair, int, family, int, type, int, protocol,int __user *, usockvec) {return __sys_socketpair(family, type, protocol, usockvec); } 这段代码定义了一个名为 socketpair 的系统调用。系统调用是操作…...

【论文精读】BERT
摘要 以往的预训练语言表示应用于下游任务时的策略有基于特征和微调两种。其中基于特征的方法如ELMo使用基于上下文的预训练词嵌入拼接特定于任务的架构;基于微调的方法如GPT使用未标记的文本进行预训练,并针对有监督的下游任务进行微调。 但上述两种策略…...
Codeforces Round 925 (Div. 3) - A、B、C、D、E
文章目录 前言A. Recovering a Small StringB. Make EqualC. Make Equal AgainD. Divisible PairsE. Anna and the Valentines Day Gift 前言 本篇博客是Codeforces Round 925周赛的A、B、C、D、E五题的题解 A. Recovering a Small String 可以通过sum的大小分为三种情况&#…...

快速部署MES源码/万界星空科技开源MES
什么是开源MES软件? 开源MES软件是指源代码可以免费获取、修改和分发的MES软件。与传统的商业MES软件相比,开源MES软件具有更高的灵活性和可定制性。企业可以根据自身的需求对软件进行定制化开发,满足不同生产环境下的特定需求。 开源MES软件…...

【Python网络编程之TCP三次握手】
🚀 作者 :“码上有前” 🚀 文章简介 :Python开发技术 🚀 欢迎小伙伴们 点赞👍、收藏⭐、留言💬 Python网络编程之[TCP三次握手] 代码见资源,效果图如下一、实验要求二、协议原理2.…...

【leetcode】深搜、暴搜、回溯、剪枝(C++)2
深搜、暴搜、回溯、剪枝(C)2 一、括号生成1、题目描述2、代码3、解析 二、组合1、题目描述2、代码3、解析 三、目标和1、题目描述2、代码3、解析 四、组合总和1、题目描述2、代码3、解析 五、字母大小写全排列1、题目描述2、代码3、解析 六、优美的排列1…...

鸿蒙开发-UI-图形-图片
鸿蒙开发-UI-组件 鸿蒙开发-UI-组件2 鸿蒙开发-UI-组件3 鸿蒙开发-UI-气泡/菜单 鸿蒙开发-UI-页面路由 鸿蒙开发-UI-组件导航-Navigation 鸿蒙开发-UI-组件导航-Tabs 文章目录 一、基本概念 二、图片资源加载 1. 存档图类型数据源 2.多媒体像素图 三、显示矢量图 四、图片…...

.NET Core WebAPI中使用Log4net记录日志
一、安装NuGet包 二、添加配置 // log4net日志builder.Logging.AddLog4Net("CfgFile/log4net.config");三、配置log4net.config文件 <?xml version"1.0" encoding"utf-8"?> <log4net><!-- Define some output appenders -->…...
Nginx配置php留档
好久没有用过php了,近几日配置nginxphp,留档。 安装 ubunt下nginx和php都可以使用apt安装: sudo apt install nginx php8 如果想安装最新的php8.2,则需要运行下面语句: sudo dpkg -l | grep php | tee packages.txt sudo add-…...

英语题不会怎么搜答案?分享五个支持答案和解析的工具 #学习方法#媒体
在大学的学习过程中,我们常常会遇到一些难以解决的问题,有时候甚至会感到束手无策。然而,如今的技术发展给我们提供了新的解决方案。搜题软件作为一种强大的学习工具,正在被越来越多的大学生所接受和使用。今天,我将为…...

Rust 数据结构与算法:4栈:用栈实现进制转换
2、进展转换 将十进制数转换为二进制表示形式的最简单方法是“除二法”,可用栈来跟踪二进制结果。 除二法 下面实现一个将十进制数转换为二进制或十六进制的算法,代码如下: #[derive(Debug)] struct Stack<T> {size: usize, // 栈大…...

树莓派4B(Raspberry Pi 4B)使用docker搭建阿里巴巴sentinel服务
树莓派4B(Raspberry Pi 4B)使用docker搭建阿里巴巴sentinel服务 由于国内访问不了docker hub,而国内镜像仓库又没有适配树莓派ARM架构的sentinel镜像,所以我们只能退而求其次——自己动手构建镜像。本文基于Ubuntu,Jav…...

Django视图
HttpRequests对象 利用http协议向服务器传参的4种途径 提取url特定部分,如/web/index/,可以通过在服务器端的路由中用正则表达式截取查询字符串,形如?key1value&keyvalue2,(?前面是路由,…...
python基本语法
变量无需声明 Python 中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。 在 Python 中,变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存中对象的类型。 len800 #整型变…...
app逆向-⽹络请求库rxjava2
文章目录 一、前言二、安装三、GET请求实现四、POST请求实现 一、前言 RxJava 2 是一个流行的 Java 库,用于使用可观察序列组合异步和基于事件的程序。它是原始 RxJava 库的重新实现,旨在更高效并且更适合于 Java 8 及更高版本。 RxJava 2 的主要特性包…...

Spring Boot 笔记 007 创建接口_登录
1.1 登录接口需求 1.2 JWT令牌 1.2.1 JWT原理 1.2.2 引入JWT坐标 1.2.3 单元测试 1.2.3.1 引入springboot单元测试坐标 1.2.3.2 在单元测试文件夹中创建测试类 1.2.3.3 运行测试类中的生成和解析方法 package com.geji;import com.auth0.jwt.JWT; import com.auth0.jwt.JWTV…...

java数据结构与算法刷题-----LeetCode594. 最长和谐子序列
java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.csdn.net/grd_java/article/details/123063846 解题思路 子序列要尽可能长,并且最大值和最小值之间的差&#…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

React第五十七节 Router中RouterProvider使用详解及注意事项
前言 在 React Router v6.4 中,RouterProvider 是一个核心组件,用于提供基于数据路由(data routers)的新型路由方案。 它替代了传统的 <BrowserRouter>,支持更强大的数据加载和操作功能(如 loader 和…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...
OkHttp 中实现断点续传 demo
在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

NFT模式:数字资产确权与链游经济系统构建
NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...
代理篇12|深入理解 Vite中的Proxy接口代理配置
在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...
2023赣州旅游投资集团
单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...
【Java学习笔记】BigInteger 和 BigDecimal 类
BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点:传参类型必须是类对象 一、BigInteger 1. 作用:适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...

Python Ovito统计金刚石结构数量
大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...