【程序员必备技能】Git入门


目录

 🌈前言🌈

📁 Git的概念

 📂 版本控制

 📂 集中式 和 分布式 ​

📁 创建和配置本地仓库

📁 理解工作区,暂存区,版本库

📁 Git的基本操作

 📂 添加文件

 📂 查看

 📂 修改文件

 📂 撤销修改

 📂 删除文件

  📂 配置命令别名

📁 分支管理

 📂 理解分支

📂 查看分支

📂 创建分支

📂 切换分支

📂 合并分支

📂 删除分支

📂 分支策略

 📂 bug分支

📂 强制删除分支

📁 远程操作

 📂 创建远程仓库

📂 克隆远程仓库

 📂 向远程仓库推送​编辑

  📂 拉取远程仓库

 📂 忽略特殊文件

📁 标签管理

  📂 创建删除标签

  📂 推送标签

📁 总结


 🌈前言🌈

      Git作为程序员必备技能,重要程度可想而知。所以本期内容,我们将用一篇文章带你轻松入门Git,掌握使用Git。

        我将先带大家先了解Git的原理概念,再依次学习Git的各种操作,最后带大家了解公司中程序员是如何使用Git来多人协作的。

📁 Git的概念

        Git是目前主流的一个分布式版本控制系统版本控制就是一种记录文件内容变化,以方便将来查阅特定版本修改情况的系统。

 📂 版本控制

        版本控制其实最重要的就是记录文件修改记录,从而使用户能够查看历史版本,方便版本切换。

        例如,某天,上司让我们写一份设计文档,写完之后觉得不好,让你重写,你就拿回去修改,他又觉得不好,就这样,你拿着第三次设计文档找到他,他来了句不如第1版的,你把第1版的拿过来用吧。

        可是,我们是在原文档上进行修改的,第1版的部分内容早就修改没了,最后只能受到上司一顿职责。

        所以这就有了版本控制的概念,即将每次文件修改内容记录下来,让变日后的查看。

 📂 集中式 和 分布式 

        以上是集中式版本控制系统,我们只有一台服务器,将源代码上传到服务器中,如果有一天,服务器挂了,我们的源代码也就没了,所以这是非常危险的。

        而对于分布式版本控制,在我们本地上就有版本控制系统,如果有一天服务器挂了,日后我们也可以通过本地将资源再次上传到中央服务器。

📁 创建和配置本地仓库

我们首先创建一个文件夹,创建并初始化一个本地仓库

 git init 

        此外,本地仓库里,我们还要配置两个重要的内容,即name 和 email,方便日后的查询是谁提交的。

git config user.name  xxxxx
git config user.email  xxxxx

        我们下面这条指令来查看是否配置成功

git config -l

        如果我们不小心输错,可以使用下面这条指令来重置

git config --unset  user.name / user.email  : 重置

        此外,我们可以加上参数--global,将配置项作用与该机器下的所有git仓库。

git config --global xxx : 将配置项作用于该机器下所有的git仓库
git config --global --unset xxx : 

📁 理解工作区,暂存区,版本库

        如果想要实现文件版本控制,先来看看文件信息是怎么被记录的。

        我们创建了file文件,.git就是本地版本控制系统,它能否管理file文件呢。答案是不能。

        .git是不能手动修改的,即不能在.git中添加删除文件,所以我们只能在gitcode文件夹中创建修改文件,而这个文件夹就成为工作区,.git就是版本库(仓库) 

        在工作区创建修改文件操作时,都会写入到objects中,暂存区和master(主分支)中都寄存着git对象的索引(commit id),通过索引找到该对象。

        对于工作区的所有操作,添加,删除,修改都会保存在git对象中。通过维护git对象,来实现对文件的版本控制

📁 Git的基本操作

 📂 添加文件

1. git  add  . / 文件名

1)  .  : 将该目录下的所有文件添加到暂存区

2)  文件名 :指定文件添加到暂存区

2. git commit -m "提交信息"

  提交信息很重要,方便日后的查看

        通过以上两步,就将工作区文件添加到版本库中,完成对文件的版本控制。

 📂 查看

git   log 

 📂 修改文件

        通过以下指令,来查看上一次提交后,文件是否被修改。

git status

        如果,我们修改了文件,但还没有添加到暂存区,可以通过一下指令,查看最近一次提交,显示工作区和暂存区的不同

git   diff  文件名

git    diff  HEAD   --   文件名 :来查看 暂存区 和 版本库的区别。

 📂 撤销修改

        学习撤销修改前,先了解一下版本回退。

        执行 git reset 命令可以回退版本,可以指定退回某一次提交的版本,也可以退回到当前版本。

        版本回退的本质是要将版本库中的内容进行回退,工作区或暂存区是否回退有命令参数决定。

git    reset  [--soft] [--mixed] [--hard]  [HEAD 或 索引号]

--soft 只是回退版本库

--mixed(默认) 回退版本库 和 暂存区

--hard 工作区,暂存区,版本库都进行回退,慎用。

        前文有一个HEAD 这里的HEAD是一个指针,指向master,master中存放着最近一次的提交对象的索引。所以,版本回退就是修改指针指向的内容。

        了解了版本回退后,我们来看一下,如果文件总有要撤销修改的情况,如果处理;文件提交到暂存区,版本库中,如果撤销修改。

1. 工作区撤销修改

    (1)手动修改,不建议。

    (2)git   checkout   --   文件名



2. 工作区,暂存区撤销修改

        git   reset   [HEAD 或 索引号]   文件名 

      (HEAD^表示上个版本,HEAD^^表示前两个版本 )

        git   checkout   --   文件名



3. 工作区,暂存区,版本库都撤销修改

        git reset --hard [HEAD 或 索引号]

 📂 删除文件

git  rm  文件名

git  commit   -m    “…"

  📂 配置命令别名

git  config  --global  alias.别名  指令

        初学者还是建议多练习一下原指令。

📁 分支管理

 📂 理解分支

        

        master是主分支,通过一个master指针来维护,通过master指针来进行版本管理。

        我们不仅可以使用master分支,还可以使用其他分支 ,合并其他分支,来提高效率。

        HEAD指针不只指向master ,Head指向的分支就是工作分支。

📂 查看分支

git    branch

        当前我们只有master分支,也只有一个master指针。

📂 创建分支

git    branch    分支名

           我们创建了一个新的dev分支,有了一个dev指针。当前的工作分支是master。

        目前HEAD指针指向master,master是工作分支,dev是基于当前版本创建的一个分支,且没有进行任何操作,所以dev指针指向当前最新的提交

📂 切换分支

git    checkout    分支名

        切换完之后,HEAD指向dev分支,dev是工作分支。

📂 合并分支

git     merge      分支名

        如果,我们在dev分支上进行修改,但master并不会受影响,如果想要mater进行修改,需要在master分支上合并dev分支,合并分支后,master指向dev分支的最新提交。

1. 分支冲突

        例如,在master和dev分支都一个最新提交,merge合并时,Git不能知道保留保留哪一分支的代码。所以git在合并时出现问题,这就是合并冲突问题,需要手动解决。

        我们只能在工作区的源代码中手动删除不保留的代码,然后提交。例如只保留bbb的代码。

        在master分支修复合并冲突后,mater指向最新的提交,dev依旧指向它的提交,没有改变。

git    log    --graph    --abbrev-commit

2. 分支模式

    (1)Fast-forward (快速提交,简称ff ) : 在该模式下,删除分支后,查看分支历史时,会丢失分支信息,看不出最新的提交是merge进来的还是正常提交的。

    (2)no-ff (非ff模式) : 查看分支历史时,不会丢失分支信息。

        ff模式下是将master指向dev最新的提交,而no-ff是怎么产生提交的?

        在no-fff模式下,在merge时,进行提交。

git    merge    --no-ff     -m     "提交信息"     分支名

📂 删除分支

git    branch    -d     分支名

        不能在工作分支删除工作分支,只能在其他分支删除。

        因为创建,合并,删除分支非常快,所以Git鼓励使用分支或完成某个任务,合并再删掉该分支,这和直接在master分支上工作是一样的,但过程更加安全

📂 分支策略

        master分支应该是非常稳定的,也就是仅用来发布新版本,平时不在上面干活;干活是在dev分支上,也就是说dev分支是不稳定的,每个人都有自己的分支,时不时往dev分支上合并就可以了。

 📂 bug分支

        在新分支上进行开发,开发时发现master分支上有bug,需要解决,在Git中,每个bug都可以通过一个新的临时分支来修复,修复后,合并分支,然后将临时分支删除。

        例如,有一个新分支dev进行开发,master分支通过fix_bug分支修复完成合并。dev合并master,在dev分支中解决分支冲突,冲突在dev中解决,master再合并dev分支。

不想工作区中dev分支影响到master分支:

git     stash                   将新的修改保存到stash文件中

git     stash    pop       将stash文件中的修改恢复到分支中。

📂 强制删除分支

        如果,我们创建了个分支,提交文件到版本库中,git不会删除这个分支,除非强制删除分支。

git     branch     -D

📁 远程操作

 📂 创建远程仓库

        目前主流的远程仓库平台有GitHup ,Gitee 。由于GitHup连接不稳定,所以教学使用Gitee,但并没有什么本质区别。

     

        点击创建,我们就创建了一个远程仓库。我们先来一步步了解里面的内容。

        仓库名称就是我们的项目名称,输入名称,下面就有有一个仓库链接了。

        设置模版中有三个文件,分别有什么含义呢?

        Readme文件,就是一个介绍文件,其中包含了该项目的一些介绍等信息。

        Issues就是一个提交问题的讨论帖,如果项目中你觉得有问题,或者可以改进,可以发一篇issue,提交给管理者。

        Pull Requests作用就是,将分支合并请求发送给管理者。在远程仓库中,并不是想合并就可以合并的,开发者要提一个PR合并申请单,说明合并理由,管理员同意,才可以进行merge操作。

📂 克隆远程仓库

        克隆远程仓库,需要一份协议,常用的有HTTPS,和SSH。SSH主要优点是公钥加密和公钥登录,需要将公钥先保存到Git仓库中,而HTTPS则没有任何要求。

1. HTTPS

git    clone     HTTPS链接

        注意不能在本地仓库所在目录下使用该命令。

git    remote  :查看远端仓库

git    remote  :查看远程仓库的权限

push是推权限,fetch是拉权限。有了这两个权限,我们就可以和远端仓库进行交互。

2. SSH

        使用SSH方式克隆仓库,由于我们没有添加公钥到远程仓库端中,服务器会拒绝我们的clone链接。需要我们设置:

        第一步:创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa 和  id_rsa.pub这两个文件,如果有了,可以直接跳到下一步。如果没有需要创建SSH Key。

git    clone    SSH链接
cd  .ssh

执行一下代码,创建公钥和私钥内为Gitee的邮箱。

ssh-keygen -t rsa   xxxx@xxx

查看公钥

cat  id_rsa.pub

        第二部:在Gitee上添加公钥。将公钥全部粘贴复制到公钥中,点击确定即可。

 📂 向远程仓库推送

        本地我们有一个file.txt文件,如何将它从本地推送到远程呢?

git  push   origin  本地分支:远程分支(名字一样,可以写成一个)

  📂 拉取远程仓库

        如果本地仓库想要看到远程仓库的内容需要进行pull操作。

git  pull  origin  远端分支:本地分支(名字一样,可以写成一个)

        拉取和推送都是分支分支之间的操作,所以远端仓库与本地仓库的分支必须有联系,而master分支之间在克隆的时候就建立了练习,那么其他分支如何确立联系呢?

 📂 忽略特殊文件

        在日常开发中,有些文件不想或者不应该被提交到远端,比如保存了数据库密码的配置文件,那怎么让Git知道呢?在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。

        Gitee在创建仓库是就可以自动为我们生成,不过需要我们主动勾选:

        如果当初没有选择,也可以在工作区中创建.gitignore文件

查看被忽略原因的命令:

git  checkignore -v  文件名

📁 标签管理

        标签tag,可以理解为针对某次commit的一个标识,相当于起一个别名。例如,在项目发布某个版本的时候,针对最后一次commit起一个v1.0这样一个标签来标识里程碑的意义。

        有什么用呢?相比于难以记住的commit id,tag很好的解决了这个问题,因为tag一定要给一个容易记住,且有意义的名字。当我们回退到某个重要版本时,直接使用标签能很好的定位。

  📂 创建删除标签

//查看标签
git  tag 
//创建标签
git  tag  标签名    [commit id]

git  tag  -a  标签名  -m  "描述信息"  [commit id]

//查看标签描述
git  show  标签名

//删除标签
git  tag  -d  标签名

  📂 推送标签

git  push  origin  标签名

//推送所有标签
git  push  origin  --tags

//本地删除远端标签
git  tag  -d  标签名
git  push origin : 标签名

📁 总结

        以上,就是Git的所有操作了,其中讲解了什么是Git,Git的基本操作,分支管理,远程操作,以及标签管理。

        理论的内容全部讲解完毕,剩下的只是实操了,大家可以在日常中,将自己写的代码进行Git,提交到远程仓库。

        如果感觉本期内容对你有用,欢迎点赞,收藏,关注。Thanks♪(・ω・)ノ

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

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

相关文章

人工智能绘画的时代下到底是谁在主导,是人类的想象力,还是AI的创造力?

#ai作画 目录 一.AI绘画的概念 1. 数据集准备: 2. 模型训练: 3. 生成绘画: 二.AI绘画的应用领域 三.AI绘画的发展 四.AI绘画背后的技术剖析 1.AI绘画的底层原理 2.主流模型的发展趋势 2.1VAE — 伊始之门 2.2GAN 2.2.1GAN相较于…

MES管理系统生产过程控制的核心要素

MES(制造执行系统)是为优化制造业生产过程和管理而设计的软件系统,其核心要素包括: 工单管理:工单管理是MES系统最基本的功能之一,它可以跟踪和管理各种类型的工单,如生产工单、维修工单和质量…

快速排序C语言实现程序

快速排序 快速排序算法一种最常见的排序算法,其核心思想就是 分治 ,具体的:1) 选定一个基准数;2) 分区,将所有大于基准数的数据分为一区,将所有小于等于基准数的数据分为一区&#x…

自定义神经网络四之编写自定义神经网络

文章目录 前言神经网络组件代码整体的项目结构Tensor张量Layers层NeuralNet神经网络Loss损失函数Optim优化器data数据处理train训练 神经网络解决实际问题实际问题训练和推理代码 总结 前言 自定义神经网络一之Tensor和神经网络 自定义神经网络二之模型训练推理 自定义神经网络…

osg qt5.15 osg3.6.3 osgEarth3.1 编译爬山

Demo演示:Qt5.15.2OSG3.6.3OsgEarth3.1的QtCreator下的msvc2019x64版本 osgQt编译 步骤一:下载解压 步骤二:CMake配置 步骤三:CMake配置添加osg环境 步骤四:CMake配置添加Qt环境 步骤五:CMake修改CMakeLis…

微信小程序uniapp劳务咨询系统知识百科考试系统java+python+nodejs+php均支持

使用劳务咨询服务平台小程序的分别管理员和用户二个权限子模块。 管理员所能使用的功能主要有:首页、个人中心、用户管理、百科分类管理、知识百科管理、地区信息管理、劳务需求管理、试卷管理、试题管理、论坛交流、系统管理、考试管理等。 用户用户端可以实现首页…

Pytorch 复习总结 3

Pytorch 复习总结,仅供笔者使用,参考教材: 《动手学深度学习》Stanford University: Practical Machine Learning 本文主要内容为:Pytorch 多层感知机。 本文先介绍了多层感知机的用法,再就训练过程中经常出现的过拟…

2024.2.23 模拟实现 RabbitMQ —— 实现消费消息逻辑

目录 引言 函数式接口 消费者订阅消息 实现思路 关于消息确认 引言 函数式接口 Lambda 表达式的本质是匿名函数Java 函数无法脱离类而存在,所以 Java 通过引入函数式接口以支持 Lambda 表达式 特性: 函数式接口为一个 interface 类该类中有且仅有一个…

【Python笔记-设计模式】代理模式

一、说明 代理模式是一种结构型设计模式,提供对象的替代品或其占位符。代理控制着对于原对象的访问,并允许在将请求提交给对象前后进行一些处理。 (一) 解决问题 控制对对象的访问,或在访问对象前增加额外的功能或控制访问 (二) 使用场景…

统信UOS系统窗口特效设置

原文链接:统信UOS系统设置窗口特效 在今天的技术分享中,我们将探讨如何在统信UOS系统上充分利用窗口特效来美化和提升用户界面的交互体验。统信UOS作为一款注重视觉体验和用户友好性的操作系统,提供了丰富的窗口特效设置,让用户可…

R语言入门笔记2.6

描述统计 分类数据与顺序数据的图表展示 为了下面代码便于看出颜色参数所对应的值,在这里先集中介绍, col1是黑色,2是粉红,3是绿色,4是天蓝,5是浅蓝,6是紫红,7是黄色,…

Go 利用上下文进行并发计算

关注公众号【爱发白日梦的后端】分享技术干货、读书笔记、开源项目、实战经验、高效开发工具等,您的关注将是我的更新动力! 在Go编程中,上下文(context)是一个非常重要的概念,它包含了与请求相关的信息&…

Bluejay电调固件修改自检音乐、自定义启动音乐旋律

Bluejay电调固件修改自检音乐、自定义启动音乐旋律 Bluejay电调固件基本介绍Bluejay电调固件特点修改自检音乐、启动音乐旋律准备材料修改过程 Bluejay固件旋律音乐格式开头部分音符部分 收集到的音乐代码 Bluejay电调固件基本介绍 Bluejay是一种数字电调固件,用于控…

Stable Diffusion 3 发布及其重大改进

1. 引言 就在 OpenAI 发布可以生成令人瞠目的视频的 Sora 和谷歌披露支持多达 150 万个Token上下文的 Gemini 1.5 的几天后,Stability AI 最近展示了 Stable Diffusion 3 的预览版。 闲话少说,我们快来看看吧! 2. 什么是Stable Diffusion…

运维SRE-08 网络基础与进阶

今日内容 - **定时备份案例进阶.** - **定时巡检(检查系统基础指标),写入到文件中.** - 网络(抽象) 掌握与吸收时间: 直到课程结束.(第2阶段结束) - 网络基础: 网络概述,网络结构,网络设备. - 网络核心: OSI7层模型 ※※※※※※TCP/IP 3次握手 ※※※※※※TCP/IP 4…

Django入门指南:从环境搭建到模型管理系统的完整教程

环境安装: ​ 由于我的C的Anaconda 是安装在C盘的,但是没内存了,所有我将环境转在e盘,下面的命令是创建环境到指定目录中. conda create --prefixE:\envs\dj42 python3.9进入环境中: conda activate E:\envs\dj42…

【并发】CAS原子操作

1. 定义 CAS是Compare And Swap的缩写,直译就是比较并交换。CAS是现代CPU广泛支持的一种对内存中的共享数据进行操作的一种特殊指令,这个指令会对内存中的共享数据做原子的读写操作。其作用是让CPU比较内存中某个值是否和预期的值相同,如果相…

C#与VisionPro联合开发——串口通信

串口通信 串口通信是一种常见的数据传输方式,通过串行接口(串口)将数据以串行比特流的形式进行传输。在计算机和外部设备之间,串口通信通常是通过串行通信标准(如RS-232)来实现的。串口通信可以用于连接各…

AtCoder ABC342 A-D题解

华为出的比赛&#xff1f; 好像是全站首个题解哎&#xff01; 比赛链接:ABC342 Problem A: 稍微有点含金量的签到题。 #include <bits/stdc.h> using namespace std; int main(){string S;cin>>S;for(int i0;i<s.size();i){if(count(S.begin(),S.end(),S[i…

《穿越火线:枪战王者》手游客户端技术方案: 实时同步与手感优化 转载

一、项目背景 CF手游的团队有着相当丰富的FPS游戏制作经验&#xff0c;但是移动端开发经验相对匮乏。团队面对的挑战很大&#xff0c;我们需要在手机端完美还原CF十多个游戏模式&#xff0c;上百把枪械手感。 虽然我们有实时对战FPS游戏开发经验&#xff0c;但是手游网络质量…