【程序员必备技能】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♪(・ω・)ノ

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

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

相关文章

论文阅读:How Do Neural Networks See Depth in Single Images?

是由Technische Universiteit Delft(代尔夫特理工大学)发表于ICCV,2019。这篇文章的研究内容很有趣,没有关注如何提升深度网络的性能,而是关注单目深度估计的工作机理。 What they find? 所有的网络都忽略了物体的实际大小,而关注他们的垂直…

Seata分布式事务实战AT模式

目录 分布式事务简介 典型的分布式事务应用场景 两阶段提交协议(2PC) 2PC存在的问题 什么是Seata? Seata的三大角色 Seata AT模式的设计思路 一阶段 二阶段 Seata快速开始 Seata Server(TC)环境搭建 db存储模式Nacos(注册&配…

【C++】多态概念(入门)

介绍: 多态的概念:通俗来说,多态就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态。比如扫红包操作,同样是扫码动作,不同的用户扫 得到的不一样的红包&#xff0…

限流算法

下面对常见的限流算法进行讨论。目前,常用的限流算法主要有三种:计数器法、滑动窗口算法、漏桶算法和令牌桶算法。下面分别介绍其原理。 1. 计数器法 计数器法是通过计数对到来的请求进行选择性处理。如系统限制一秒内最多有X个请求,则在该…

042 继承

代码实现 首先定义Person类(人类) /*** 人的基础特征** author Admin*/ public class Person {/*** 姓名*/String name;/*** 生日*/Date birthday;/*** 手机号码*/String tel;/*** 身份证号码*/String idCode;public Person() {}public Person(String …

关于添加第三方jar包到SpringBoot工程中的一些问题

1&#xff1a;如果是多级module工程的情况下&#xff0c;将jar包添加到当前module中&#xff1b; 2&#xff1a;在当前需要依赖的maven工程中添加 外部jar包路径进行引入 <dependency><groupId>kuaishou</groupId><artifactId>kuaishou-merchant-ope…

自定义悬浮气泡组件

一.常用悬浮气泡展示 在一个项目中&#xff0c;常常会使用点悬浮展示&#xff0c;而市面上悬浮tooltip的组件非常多 例如常用的antd提供的Tooltip 用法如下&#xff08;来自于官方文档示例&#xff09;&#xff1a; import React from react; import { Button, Tooltip, Con…

FariyGUI × Cocos Creator 3.x 弹窗制作

在fgui里制作一个弹窗 新建一个按钮&#xff0c;作为返回按钮 新建一个标签 做成这个样子 其中包含两个节点&#xff0c;名称分别为title和closeButton 可以阅读fgui的源码window.js得到&#xff0c;closeButton按钮只需要输入名称即可在contentPane设置时自动绑定。 且会…

计算机网络-网络互联与互联网(一)

1.常用网络互联设备&#xff1a; 1层物理层&#xff1a;中继器、集线器2层链路层&#xff1a;网桥、交换机3层网络层&#xff1a;路由器、三层交换机4层以上高层&#xff1a;网关 2.网络互联设备&#xff1a; 中继器Repeater、集线器Hub&#xff08;又叫多端口中继器&#xf…

Git笔记——4

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言 一、操作标签 二、推送标签 三、多人协作一 完成准备工作 协作开发 将内容合并进master 四、多人协作二 协作开发 将内容合并进master 五、解决 git branch -a…

【论文解读】transformer小目标检测综述

目录 一、简要介绍 二、研究背景 三、用于小目标检测的transformer 3.1 Object Representation 3.2 Fast Attention for High-Resolution or Multi-Scale Feature Maps 3.3 Fully Transformer-Based Detectors 3.4 Architecture and Block Modifications 3.6 Improved …

直接写就行!EI顶刊组合:多能源微网/综合能源系统两阶段鲁棒优化配置方法代码!

适用平台&#xff1a;MatlabYalmipCplex 参考文献&#xff1a; 《考虑机组禁止运行区间的含风电鲁棒机组组合》-中国电机工程学报 《微电网两阶段鲁棒优化经济调度方法》-中国电机工程学报 程序提出了微电网中电源容量的两阶段鲁棒优化配置模型&#xff0c;第一阶段主要决策…

初识51单片机

##江科大51单片机学习 什么是单片机&#xff1f;&#xff1f;&#xff1f; 单片机&#xff0c;英文名&#xff0c;Micro Controller Unit&#xff0c;简称MCU&#xff08;tips&#xff1a;有人会简称它为CPU&#xff0c;但不是如此&#xff0c;CPU其实被集成在MCU中&#xff…

Tomcat 学习之 Servlet

目录 1 Servlet 介绍 2 创建一个 Servlet 3 web.xml 介绍&#xff08;不涉及 filter 和 listener 标签&#xff09; 3.1 display-name 3.2 welcome-file-list 3.3 servlet 3.4 session-config 3.5 error-page 3.6 context-param 4 ServletContext 5 ServletConfig …

前后端分离vue.js+nodejs学生考勤请假系统 _fbo36

此系统设计主要采用的是nodejs语言来进行开发&#xff0c;采用vue框架技术&#xff0c;框架分为三层&#xff0c;分别是控制层Controller&#xff0c;业务处理层Service&#xff0c;持久层dao&#xff0c;能够采用多层次管理开发&#xff0c;对于各个模块设计制作有一定的安全性…

解决easyExcel模板填充时转义字符\{xxx\}失效

正常我们在使用easyExcel进行模板填充时&#xff0c;定义的变量会填充好对应的实际数据&#xff0c;未定义的变量会被清空&#xff0c;但是如果这个未定义的变量其实是模板的一部分&#xff0c;那么清空了就出错了。 在这张图里&#xff0c;上面的是模板填充后导出的文件&…

探索无限维度的奥秘:Hilbert空间

当我们提到空间&#xff0c;你可能会立即想到周遭的环境——三维世界&#xff0c;其中事物可以向上或向下、左或右、前或后移动。然而&#xff0c;在数学和物理学的世界里&#xff0c;有一种抽象的空间概念&#xff0c;它不仅覆盖了我们的三维空间&#xff0c;还包括了更复杂的…

【Java程序设计】【C00313】基于Springboot的物业管理系统(有论文)

基于Springboot的物业管理系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的物业管理系统&#xff0c;本系统有管理员、物业、业主以及维修员四种角色权限&#xff1b; 管理员进入主页面&#xff0c;主要功能包…

MATLAB 导出可编辑的eps格式图像

任务描述&#xff1a;部分期刊要求提交可编辑的eps格式图像&#xff0c;方便美工编辑对图像进行美化 我试了直接print或者在figure窗口导出&#xff0c;发现导出的文件放到Adobe AI中并不能编辑&#xff0c;经Google找到解决办法&#xff1a; %EPS exportgraphics(gcf,myVect…

jQuery瀑布流画廊,瀑布流动态加载

jQuery瀑布流画廊&#xff0c;瀑布流动态加载 效果展示 手机布局 jQuery瀑布流动态加载 HTML代码片段 <!-- mediabanner --><div class"mediabanner"><img src"img/mediabanner.jpg" class"bg"/><div class"text&qu…