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

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

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

相关文章

记一次多平台免杀PHP木马的制作过程

注意:本文转载自本作者稀土掘金博客 博客地址: 御坂19008号 的个人主页 - 动态 - 掘金 文章目录 前言声明绕过情况使用方法运行环境绕过点介绍技术原理讲解变量传值覆盖模块代码执行阻断模块InazumaPuzzle程序锁定器PerlinNoise危险函数生成与执行类构造…

Android 基础技术——addView 流程

笔者希望做一个系列,整理 Android 基础技术,本章是关于 addView 在了解 addView 流程之前,先回答下以下几个问题: PhoneWindow是什么时候创建的? DectorView 是什么? DectorView 是什么时候创建的&#xf…

Oracle行转列函数,列转行函数

Oracle行转列函数,列转行函数 Oracle 可以通过PIVOT,UNPIVOT,分解一行里面的值为多个列,及来合并多个列为一行。 PIVOT PIVOT是用于将行数据转换为列数据的查询操作(类似数据透视表)。通过使用PIVOT,您可以按照特定的列值将数据进行汇总,并将…

Flowable 生成流程图

/*** 生成流程图** param processId 任务ID*/ RequestMapping("/diagram/{processId}") public void genProcessDiagram(HttpServletResponse response,PathVariable("processId") String processId) {InputStream inputStream flowTaskService.diagram(p…

SpringCloud整合Zookeeper代替Eureka案例

文章目录 本期代码下载地址zookeeper简介zookeeper下载安装新建服务提供者测试 新建消费者测试 本期代码下载地址 地址:https://github.com/13thm/study_springcloud/tree/main/days4 zookeeper简介 zookeeper是一个分布式协调工具,可以实现注册中心功能 关闭Lin…

WampServer

开发笔记 推荐链接php无法保存SESSION问题部署SSL时候产生的问题 推荐链接 链接目录 php无法保存SESSION问题 php.ini文件和phpForApache.ini 文件 里面都有 对路径的控制,相关路径问题可能也需要进行修改,打开文件搜索wamp64或wamp 就可以看到了&…

线程池--JAVA

虽然线程是轻量级进程,但是如果当创建和销毁的的频率非常之高,那么它也就会消耗很多的资源。 而线程池就是用来优化线程频繁创建和销毁的场景,减少线程创建、销毁的频率。 ExecutorService JAVA标准库为我们实现了线程池,Execu…

windows11上安装虚拟机VMware

1、安装虚拟机(待补充) 第二步:安装VMware tools 实现windows文件上传到虚拟机中 1、安装好虚拟机后,查看虚拟机ip用Xshell连接虚拟机,并安装VMware tools(只有安装了VMware tools才能实现虚拟机和本机的文件共享。在…

无人机航迹规划(四):七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划(提供MATLAB代码)

一、七种算法(DBO、LO、SWO、COA、LSO、KOA、GRO)简介 1、蜣螂优化算法DBO 蜣螂优化算法(Dung beetle optimizer,DBO)由Jiankai Xue和Bo Shen于2022年提出,该算法主要受蜣螂的滚球、跳舞、觅食、偷窃和繁殖…

Python编辑开发---pycharm pro 2023 中文

PyCharm Pro 2023是一款功能强大的Python集成开发环境(IDE),旨在提高Python开发人员的生产力。它提供了智能代码编辑、实时代码分析和调试工具,支持版本控制和数据库工具,以及可扩展的插件系统。PyCharm Pro 2023可在多…

什么是区块链?

区块链 区块链 (英语:blockchain)是借由 密码学 与 共识机制 等技术建立,存储数据的 保证不可篡改和不可伪造的 分布式技术。 什么是区块 区块 就是将一批数据打包在一起,并且给打包出来的区块编号。第一个区块的编…

Kylin 安装novnc 远程访问

noVNC可以使用浏览器直接访问服务器,而不需要使用VNC客户端。 1.初始环境 关闭防火墙或允许IP访问本机 2.安装依赖 dnf install -y tigervnc-server git 3.git下载novnc git clone https://github.com/novnc/noVNC.git git clone https://gitee.com/yangyizhao…

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK使用相机日志跟踪功能(C++)

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK使用相机日志跟踪功能(C) Baumer工业相机Baumer工业相机NEOAPI SDK和短曝光功能的技术背景Baumer工业相机通过NEOAPI SDK使用相机日志跟踪功能1.引用合适的类文件2.通过NEOAPI SDK使用相机日志跟踪功能3.通…

如何用数据赋能社媒营销决策?

在数字化时代,越来越多的商家开始意识到数据分析对于改善经营的重要性。 传统决策更多依赖过往经验、商业直觉、他人的思路模板等方法,或者依靠描述性统计、简单的数据分析。在数字时代,则通过精细化数据分析,做出更明智的营销决策…

S2-08 ESP-IDF开发 : 存储

S2-06 和 S2-07 暂时先不发,课上没给同学们将,分别是 DMA 和 USB 章节,作为专项讲 存储 ESP32 系列芯片中,不同型号的芯片所携带的 ROM、SRAM、RCT SRAM、PSRAM 以及 Flash大小不同,他们的作用如下: SRAM…

2023年总结我所经历的技术大变革

📢欢迎点赞 :👍 收藏 ⭐留言 📝 如有错误敬请指正,赐人玫瑰,手留余香!📢本文作者:由webmote 原创📢作者格言:新的征程,我们面对的不仅…

如何使用支付宝沙箱环境本地配置模拟支付并结合内网穿透远程调试

文章目录 前言1. 下载当面付demo2. 修改配置文件3. 打包成web服务4. 局域网测试5. 内网穿透6. 测试公网访问7. 配置二级子域名8. 测试使用固定二级子域名访问 正文开始前给大家推荐个网站,前些天发现了一个巨牛的 人工智能学习网站, 通俗易懂&#xff…

基本查找(顺序查找)

基本查找/顺序查找 基本思想思路代码示例输出结果 ​ 说明:顺序查找适合于存储结构为数组或者链表。 基本思想 顺序查找也称为线形查找,属于无序查找算法。从数据结构线的一端开始,顺序扫描,依次将遍历到的结点与要查找的值相比…

linux基础学习(5):yum

yum是为了解决rpm包安装依赖性而产生的一种安装工具 1.yum源 1.1配置文件位置 yum源的配置文件在/etc/yum.repos.d/中 *Base源是网络yum源,也就是需要联网才能使用的yum源。默认情况下,系统会使用Base源 *Media源是光盘yum源,是本地yum源…

【Android12】Android Framework系列---Adb和PMS安装apk源码流程

Adb和PMS安装apk源码流程 adb install命令 通过adb install命令可以将apk安装到Android系统(注意:特定类型的apk,比如persist类型是无法通过adb安装的) 下述命令中adb解析install命令,并调用Android PackageManagerS…