Git入门详细教程

一、Git概述🎇

git

Git官网

Git是一个开源的分布式版本控制系统,用于跟踪文件的变化和协作开发。它允许多个开发者在同一项目中共同工作,并能够有效地管理代码的版本和历史记录。Git可以帮助开发团队更好地协作,追踪代码变更,并且可以在需要时轻松地回滚到之前的版本。

1.1 什么是版本控制

版本控制是一种管理文件变化的系统,它可以跟踪文件的修改、添加和删除,并记录这些变化的历史。版本控制系统可以帮助团队协作开发,确保每个人都在同一个代码基础上工作,并且可以轻松地查看和恢复文件的不同版本。它还可以提供分支和合并功能,允许多个开发者并行地修改代码,并将这些修改合并到一个共同的代码库中。版本控制系统可以提高开发效率,减少错误,并且有助于保持代码库的整洁和可维护性。

1.2 版本控制工具

一些常见的版本控制工具包括:

  1. Git(GPT-3.5)
  2. Subversion(SVN)
  3. Mercurial
  4. Perforce
  5. CVS(Concurrent Versions System)
  6. Bazaar

版本控制工具又分为集中式版本控制工具分布式版本控制工具

集中式版本控制工具

集中化的版本控制系统诸如CVS、SVN等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。多年以来,这已成为版本控制系统的标准做法。

这种做法带来了许多好处,每个人都可以在一定程度上看到项目中的其他人正在做些什么。而管理员也可以轻松掌控每个开发者的权限,并且管理一个集中化的版本控制系统,要远比在各个客户端上维护本地数据库来得轻松容易。

事分两面,有好有坏。这么做显而易见的缺点是中央服务器的单点故障。如果服务器宕机一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作

分布式版本控制工具

像Git这种分布式版本控制工具,客户端提取的不是最新版本的文件快照,而是把代码仓库完整地镜像下来(本地库)。这样任何一处协同工作用的文件发生故障,事后都可以用其他客户端的本地仓库进行恢复。因为每个客户端的每一次文件提取操作,实际上都是一次对整个文件仓库的完整备份。

分布式的版木控制系统山现之后,解决了集中式版木控制系统的缺陷:

  1. 服务器断网的情况下也可以进行开发(因为版本控制是在本地进行的)

  2. 每个客户端保存的也都是整个完整的项目(包含历史记录,更加安全)

1.3 Git简史

Git是由Linus Torvalds于2005年创立的分布式版本控制系统。Git的历史可以追溯到Linux内核开发过程中对版本控制系统的需求。在此之前,Linux内核的开发使用BitKeeper作为版本控制工具,但随着一些争议的出现,Linux社区需要一个开源的替代方案。

因此,Linus Torvalds开发了Git,并于2005年发布了首个版本。Git的设计目标是速度、数据完整性和分布式架构。它的发展得到了全球开发者社区的广泛支持,成为了目前最流行的版本控制系统之一。

Git的发展历程中,不断得到改进和扩展,吸引了全球开发者的参与,形成了一个庞大的生态系统。今天,Git已经成为了许多开源项目和商业项目的首选版本控制工具。

1.4 Git工作机制

git工作流程

工作区指的是存放代码的磁盘位置

1.5 Git和代码托管中心

代码托管中心是基于网络服务器的远程代码仓库,一般我们简单称为远程库。

局域网:

  1. GitLab

互联网:

  1. GitHub
  2. Gitee

二、Git安装🎊

根据自己的电脑选择合适的Git版本,本机为windows10 64位,基本上无脑下一步安装就行

image-20240115155031570

选Vim就行,Notepad++也行

image-20240115155230368

其它的不用改,直接下一步,然后安装,安装完成后,鼠标右键会有Git

image-20240115155814038

git --version #查看git版本信息

image-20240115155855691

三、Git常用命令🎃

命令名称作用
git config --global user.name 用户名设置用户签名
git config --global user.email 邮箱设置用户签名
git init初始化本地库
git status查看本地库状态
git add 文件名添加到暂存区
git commit -m"日志信息" 文件名提交到本地库
git reflog查看历史记录
git reset–hard 版本号版本号版本穿梭

3.1 设置签名

右键打开Git Bash输入

git config --global user.name "笑的像个child"

git config --global user.email "xxxxx@qq.com(自己的邮箱)"

image-20240115160719860

3.2 初始化本地库

创建一个git-demo文件夹(后面的实验都基于这个文件夹),并右键进入git bash,并输入初始化命令

git init

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

可以看到当前目录存在.git文件夹(看不到是因为它默认是隐藏的)

image-20240116112145948

3.3 查看本地库状态

git status

image-20240116112436811

新增文件

在git-demo下创建一个hello.txt文件,并在其中写入一行hello git,关闭并保存

再次查看本地库的状态,此时文件还只存在于工作区,并未添加至暂存区。

image-20240116112820932

3.4 添加暂存区

将文件添加至暂存区,输入命令

git add hello.txt 

也可以使用

git add .  # .的意思是添加所有文件至暂存区。

添加完成后,再次查看本地库状态

image-20240116113404046

此时,git已经追踪到了文件,此时如果你不想保存一个历史版本,是可以删除掉的。

git rm --cached hello.txt #将文件从暂存区删除(此时还没有记录历史版本,只有commit时才会有历史版本)

image-20240116113551401

此处只是做实验,测试删除暂存区的文件,删除后,重新添加至暂存区,为后面的实验做准备

3.5 提交本地库

git commit -m "第一次提交" hello.txt

image-20240116114211643

提交完成后,再次查看本地库状态,暂存区已经没有文件了

查看历史版本信息,

git reflog #查看历史版本

git log #可以查看更详细的提交日志

image-20240116114625484

3.6 修改文件

修改hello.txt中的内容(只在第一行新增了一段字符串),再查看本地库状态,提示文件被修改

image-20240116124618995

追踪修改添加至暂存区

image-20240116124718407

提交本地库,并查看历史版本详细日志

image-20240116124833514

提交文件后,提示一个文件被修改,一行新增,一行删除,是因为git中通过行来维护文件,修改一行,它无法表示,它是把修改之前的那一行删掉,再把修改之后的一行的内容新增进来。

3.7 历史版本

查看历史版本

git reflog #查看版本信息

git log #查看版本详细信息

image-20240116125452092

版本穿梭

穿梭回第一个版本,并查看文件,已经回到第一个版本

git reset --hard "历史版本号"

image-20240116125736332

穿梭回第二次提交的版本

image-20240116130224775

四、Git分支操作🎄

命令名称作用
git branch 分支名创建分支
git branch -v查看分支
git checkout 分支名切换分支
git merge 分支名把指定的分支合并到当前分支上

4.1 分支概述

Git分支是在Git版本控制系统中用于并行开发和管理不同功能或版本的代码的重要概念。分支可以让开发者在不影响主线代码的情况下,独立地进行开发、测试和修改。在Git中,主要的分支是master(或main)分支,它包含了项目的主要代码。除了主分支外,开发者可以创建其他分支,比如feature分支用于开发新功能,bugfix分支用于修复bug,release分支用于发布版本等。

分支的优势在于它能够提供一种安全的方式来进行并行开发,避免了直接在主分支上进行修改可能带来的风险。同时,分支也可以帮助团队协作,每个成员可以在自己的分支上进行开发,最后合并到主分支上。

在Git中,创建、切换、合并、删除分支都是非常简单的操作,开发者可以根据需要随时创建新的分支,并在不同分支之间切换,以便进行不同的工作。因此,合理地使用分支可以帮助开发团队更高效地进行代码管理和开发工作。

git分支

4.2 查看分支

git branch -v #查看当前存在的的分支

image-20240117215916227

4.3 创建分支

创建hot-fix分支后,再查看当存在的分支(当前还是在master分支)

git branch "分支名"

image-20240117220021130

4.4 切换分支

从master分支切换到hot-fix分支上

git checkout hot-fix

image-20240117220513565

分支已从master分支切换到hot-fix分支

4.5 修改分支

当前在hot-fix分支上,修改hello.txt文件,并将其提交本地库

image-20240117222538139

4.6 分支合并

正常合并

git merge hot-fix

image-20240117223126458

冲突合并

**冲突产生的原因:**合并分支时,两个分支在同一个文件的同一个位置有两套完全不同的修改。Git无法替我们决定使用哪一个。必须人为决定新代码内容

先在master分支下修改文件,然后切换到hot-fix分支下,然后再在同一行修改文件(修改内容可以随意),然后切换回master分支合并hot-fix分支

image-20240117224336490

查看本地库状态

image-20240117224417306

此时需要手动合并代码

查看hello.txt文件

image-20240117225014849

解决冲突

image-20240117225505733

将特殊符号删除,然后保留需要的片段,此处两段同时保留

重新提交文件

image-20240117225652121

此时commit不能带文件名!!!不能带文件名!!!不能带文件名!!!

五、团队协作🎎

5.1 团队协作机制

团队内协作

git团队协作

简述:A和B是同一团队的成员,A将代码push至代码远程仓库,B可以将其clone下来然后修改,再push到远程仓库,A就可以pull下B修改的部分代码。

跨团队协作

git跨团队协作

A和C是同一开源项目的团队成员,B并不是,B觉得A的团队写的代码不够好,然后就fork了一份完整的代码(整个库),然后clone至本地,B将其修改优化后又push到他的远程仓库,然后发起pull request,开源团队进行审核,觉得B写的很好,就将他的代码进行merge,然后开源团队又将自己的代码进行更新。

六、Gitee操作🎨

6.1 推送本地库到远程库

GitHub这两天打开的实在是太慢了,我梯子又过期了,在此就使用Gitee进行演示了,都大差不差。

进入Gitee的个人主页点击创建

image-20240118151512128

填写仓库基本信息,然后创建

image-20240118151557839

设置别名

git remote add "别名" "链接"

image-20240118152059052

推送至远程仓库

git push git-test master

image-20240118152323515

在本地修改了文件后还是先将其提交暂存区,本地库,然后再push一下就可以了

查看gitee仓库存在推送的文件

image-20240118152349429

6.2 拉取远程库到本地

此时远程库的文件内容和本地的是不一致的

image-20240118153732210

在git-demo中打开git,输入拉取的命令

git pull "远程仓库的别名或链接" "分支名"

image-20240118153933792

此时,本地的hello.txt文件已经更新和远程库的文件内容一致

6.3 克隆远程库到本地库

拉取远程库

image-20240118152854021

先在自己电脑上随意找一个没有文件的位置,然后打开git

git clone "复制的链接"

image-20240118153110084

仓库,文件都克隆成功

image-20240118153216201

其它的项目都是这样,复制链接然后clone

七、自建GitLab代码托管平台🌭

gitlab

GitLab官网

GitLab的历史可以追溯到2011年,当时由荷兰的程序员Sytske Sijbrandij和Dmitriy Zaporozhets共同创建了GitLab。最初,GitLab是作为一个开源项目发布的,旨在提供一个基于Web的Git仓库管理工具,以及一系列的协作工具,例如问题跟踪、持续集成和部署等。

随着时间的推移,GitLab逐渐获得了越来越多的用户和开发者的支持。2013年,GitLab发布了第一个企业版,为企业用户提供了更多的高级功能和支持服务。2015年,GitLab发布了自托管版本,使用户可以在自己的服务器上部署和运行GitLab。

GitLab持续不断地进行更新和改进,增加了许多新的功能和工具,如持续集成、持续部署、代码审查等,使其成为一个功能强大的代码管理平台。2017年,GitLab完成了一轮高达2000万美元的融资,进一步加速了其发展。

至今,GitLab已经成为了全球范围内广受欢迎的代码托管和协作工具,拥有庞大的用户群和开发者社区。它的开源版本和企业版都得到了广泛的应用,为软件开发团队提供了全面的解决方案。GitLab的发展历程充分展示了其不断创新和改进的精神,以及对用户需求的不断关注和满足。

7.1 服务器安装GitLab

GitLab下载安装_GitLab最新中文官网免费版下载-极狐GitLab

本人使用的是一台Centos7的服务器

下载/安装极狐GitLab

curl -fsSL https://packages.gitlab.cn/repository/raw/scripts/setup.sh | /bin/bash

image-20240118165812674

开始安装

EXTERNAL_URL="http://gitlab.example.com" yum install -y gitlab-jh

此处"http://gitlab.example.com"修改为服务器的地址并指定端口号

建议大家使用内存大一点的服务器,我的已经挂了,后续演示放在下一篇文章😅😅😅

image-20240118181444550

参考资料

01_尚硅谷_Git_课程介绍_哔哩哔哩_bilibili

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

云轴科技ZStack 助力广西某地级市建设市级警务云视频系统

某市属于广西壮族自治区辖地级市,省域副中心城市,选择云轴科技ZStack 超融合解决方案支撑警务云视频监控联网管理系统(警务云视频系统),实现了该市对各辖区视频资源统一管理;同时也满足了该市警务云视频系统…

技术分享 | App常见bug解析

在 app 产品测试过程中,可能会遇到很多不同类型的 Bug。知道了可能 Bug 的类型,有利于在测试过程中更好的预防这些问题的发生。 功能Bug 内容显示错误 前端页面展示的内容有误。 这种错误的产生有两种可能 前端代码写的文案错误接口返回值错误 功能…

windows安装mysql5.7

看了如何学习mysql后,就开始本地安装mysql,开始学习了。 1.官网下载 官网地址: https://dev.mysql.com/downloads/mysql/ 选择5.7版本 点击 “No thanks, just start my download”开始下载 下载64位的压缩包版 解压下载好的.zip文件&#xf…

游戏开发中的噪声算法

一、噪声 噪声是游戏编程的常见技术,广泛应用于地形生成,图形学等多方面。 那么为什么要引入噪声这个概念呢?在程序中,我们经常使用直接使用最简单的rand()生成随机值,但它的问题在于生成的随机值太“随机”了&#xf…

X-Bogus加密参数分析与jsvmp算法(仅供学习)

文章目录 1. 抓包分析2. X-Bogus参数分析 【作者主页】:吴秋霖 【作者介绍】:Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作! 【作者推荐】:对JS逆向感兴趣的朋友可以关注《爬虫…

【算法Hot100系列】跳跃游戏

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老导航 檀越剑指大厂系列:全面总结 jav…

【题解 Trie树 字符串】 C - New but Nostalgic Problem

题目描述: 分析: 题目中涉及到了若干字符串的公共前缀,显然可以用trie树去完成 建立trie树的同时,我们为了做题方便,用以下两个数组去记录一下trie树的信息: t o t i tot_i toti​表示以i为根的子树中有几…

ICBE 2024第十二届深圳国际跨境电商交易博览会

ICBE 2024第十二届深圳国际跨境电商交易博览会 暨中国跨境电商综试区发展高峰论坛 展会时间:2024年9月2日-4日 展会地点:深圳会展中心(福田) 指导单位:广东省商务厅 主办单位:广东省电子商务协会/扩展集团 承办单…

基于局部信息提取的人脸标志检测算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 人脸检测 4.2 局部区域选择 4.3 特征提取 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 .........................................…

【LeetCode每日一题】2171. 拿出最少数目的魔法豆

2024-1-18 文章目录 [2171. 拿出最少数目的魔法豆](https://leetcode.cn/problems/removing-minimum-number-of-magic-beans/)思路: 2171. 拿出最少数目的魔法豆 思路: 对输入的数组进行排序,使得数组中的元素按照升序排列。初始化一个变量s…

python如何包含其他路径的模块

python 包含其他路径的模块: 例如目录结构: dir1 |__ init.py |__ module1.py dir2 |__ main.py main.py from dir1 import module1首先需要在 dir1 添加 init.py 文件,该文件可以是空文件。 其次需要将dir1 的父目录添加到python 解释器的&#xf…

小红书投放策略有哪些?品牌运营思路

想要在小红书进行合理的达人投放,离不开一份完备且具备可实施性的达人投放策略。今天我们和大家分享下小红书投放策略有哪些?品牌运营思路! 制定小红书达人投放策略,按照以下四个步骤进行即可。 1、投放目的 这里的确定投放目的包…

跟着pink老师前端入门教程-day06

十一、CSS 的背景 通过CSS背景属性,可以给页面元素添加背景样式 背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等。 11.1 背景颜色 background-color 属性定义了元素的背景颜色 一般情况下元素背景颜色默认值是transparent&…

KubeSphere平台使用

KubeSphere官网地址:https://kubesphere.io/zh/ KubeKey一键部署K8S集群:https://kubesphere.io/zh/docs/v3.4/installing-on-linux/introduction/multioverview/ 一台master node(初始化主节点)、两台 work node( joi…

2024-01-15(SpringMVCMybatis)

1.拦截器:如果我们想在多个handler方法(controller中的方法)执行之前或者之后都进行一些处理,甚至某些情况下需要拦截掉,不让handler方法执行,那么就可以使用SpringMVC为我们提供的拦截器。 拦截器和过滤器的区别:过滤…

浏览器插件:Web Scraper 基本用法和抓取页面内容(无需写代码,即可爬取数据)

Web Scraper 是一个浏览器扩展,用于从页面中提取数据(网页爬虫)。对于简单或偶然的需求非常有用,例如正在写代码缺少一些示例数据,使用此插件可以很快从类似的网站提取内容作为模拟数据。从 Chrome 的插件市场安装后,页面 F12 打开…

Python项目——搞怪小程序

1、介绍 使用python编写一个小程序,回答你是猪吗。 点击“是”提交,弹窗并退出。 点击“不是”提交,等待5秒,重新选择。 并且隐藏了关闭按钮。 2、实现 新建一个项目。 2.1、设计UI 使用Qt designer设计一个UI界面&#xff0c…

[bat]0基础实现自动化办公-新建bat脚本文件

一、引言 本文是自动化办公之路的开篇,主要面向0基础同学介绍如何新建一个bat脚本文件。接下来会逐渐深入讲解如何实现自动化办公,如有什么需求场景,可评论区留言,我后面会逐一实现。 二、方案 通过对text文本文档文件改文件后…

DETR 个人理解

DETR 个人理解 目录 DETR 个人理解 概念说明 transformer网络结构 整体流程 损失计算 整体理解 结果说明 论文 代码 参考链接 个人拙见,仅供参考,欢迎指正交流 这篇论文还是挺重要的,因为是transforms用于目标检测的第一篇论文&am…

一、Linux基础

一、Linux 1.1 Linux 的应用领域 1.1.1 个人桌面领域的应用 此领域是 Linux 比较薄弱的环节但是随着发展,近几年 linux 在个人桌面领域的占有率在逐渐提高 1.1.2 服务器领域 linux 在服务器领域的应用是最高的 linux 免费、稳定、高效等特点在这里得到了很好的…