【程序员必备技能】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.mzph.cn/news/701954.shtml

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

相关文章

JMeter实现接口自动化测试

一、JMETER的环境搭建 参考:https://www.cnblogs.com/qmfsun/p/4902534.html 二、JMETER的汉化 临时汉化方法:打开jmeter,options-->choose language-->选择语言 可以根据自己的需要选择简体中文或者繁体中文,如图&#xf…

字符串(算法竞赛)--字典树Trie与最大异或对

1、B站视频链接&#xff1a;F06 字典树(Trie)_哔哩哔哩_bilibili 题目链接&#xff1a;【模板】字典树 - 洛谷 #include <bits/stdc.h> using namespace std; const int N100010; int n; char s[N]; int ch[N][26];//ch[0][2]1表示0号节点通过c边走到了节点1 int cnt[…

【电子通识】认识FMEA(失效模式和影响分析)

FMEA是Failure Mode and Effect Analysis的英文缩写&#xff0c;中文名称为失效模式和影响分析。主要应用于航空航天、食品、汽车和核电等行业。 FMEA讨论的是事先策划以及执行措施&#xff0c;预防问题的发生或控制问题的发展&#xff0c;降低设计和过程的风险。由于问题还没…

基于java Springboot实现教务管理系统

基于java Springboot实现教务管理系统《视频版-建议收藏》 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言 文…

回归预测 | Matlab实现CPO-HKELM冠豪猪算法优化混合核极限学习机多变量回归预测

回归预测 | Matlab实现CPO-HKELM冠豪猪算法优化混合核极限学习机多变量回归预测 目录 回归预测 | Matlab实现CPO-HKELM冠豪猪算法优化混合核极限学习机多变量回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现CPO-HKELM冠豪猪算法优化混合核极限学习机…

C语言------操作符的巧妙使用

1.计算一个数字二进制补码里面1的个数 &#xff08;1&#xff09;方法一 根据这个10进制的整数&#xff0c;对这个数进行%10&#xff0c;/10不断地进行下去&#xff0c; %10得到最后一位&#xff0c;/10得到舍去最后一位之后剩余的数&#xff1b; 同理得到&#xff1a;二进…

09 呼吸灯

呼吸灯简介 呼吸灯实际展示的效果就是一个 LED 灯的亮度由亮到暗&#xff0c;再由暗到亮的变化过程&#xff0c;并且该过程是循环往复的&#xff0c;像呼吸一样那么有节奏。 呼吸灯通常是采用 PWM(Pulse Width Modulation&#xff0c;即脉冲宽度调制) 的方式实现&#xff0c;在…

如何使用移动端设备在公网环境远程访问本地黑群晖

文章目录 前言本教程解决的问题是&#xff1a;按照本教程方法操作后&#xff0c;达到的效果是前排提醒&#xff1a; 1. 搭建群晖虚拟机1.1 下载黑群晖文件vmvare虚拟机安装包1.2 安装VMware虚拟机&#xff1a;1.3 解压黑群晖虚拟机文件1.4 虚拟机初始化1.5 没有搜索到黑群晖的解…

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

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

解析OOM的三大场景,原因及实战解决方案

目录 一、什么是OOM 二、堆内存溢出&#xff08;Heap OOM&#xff09; 三、方法区内存溢出&#xff08;Metaspace OOM&#xff09; 四、栈内存溢出&#xff08;Stack OOM&#xff09; 一、什么是OOM OOM 是 Out Of Memory 的缩写&#xff0c;意思是内存耗尽。在计算机领域…

每日OJ题_牛客JZ39 数组中出现次数超过一半的数字

目录 牛客JZ39 数组中出现次数超过一半的数字 解析代码 牛客JZ39 数组中出现次数超过一半的数字 数组中出现次数超过一半的数字_牛客题霸_牛客网 解析代码 摩尔投票法&#xff1a;摩尔投票法&#xff0c;时间O(N)&#xff0c;空间O(1)。 可以理解成混战极限一换一&#xff…

算法沉淀——动态规划之简单多状态 dp 问题(上)(leetcode真题剖析)

算法沉淀——动态规划之简单多状态 dp 问题上 01.按摩师02.打家劫舍 II03.删除并获得点数04.粉刷房子 01.按摩师 题目链接&#xff1a;https://leetcode.cn/problems/the-masseuse-lcci/ 一个有名的按摩师会收到源源不断的预约请求&#xff0c;每个预约都可以选择接或不接。在…

神经网络系列---常用梯度下降算法

文章目录 常用梯度下降算法随机梯度下降&#xff08;Stochastic Gradient Descent&#xff0c;SGD&#xff09;&#xff1a;随机梯度下降数学公式&#xff1a;代码演示 批量梯度下降&#xff08;Batch Gradient Descent&#xff09;批量梯度下降数学公式&#xff1a;代码演示 小…

基于Pytorch的猫狗图片分类【深度学习CNN】

猫狗分类来源于Kaggle上的一个入门竞赛——Dogs vs Cats。为了加深对CNN的理解&#xff0c;基于Pytorch复现了LeNet,AlexNet,ResNet等经典CNN模型&#xff0c;源代码放在GitHub上&#xff0c;地址传送点击此处。项目大纲如下&#xff1a; 文章目录 一、问题描述二、数据集处理…

[HTML]Web前端开发技术29(HTML5、CSS3、JavaScript )JavaScript基础——喵喵画网页

希望你开心,希望你健康,希望你幸福,希望你点赞! 最后的最后,关注喵,关注喵,关注喵,佬佬会看到更多有趣的博客哦!!! 喵喵喵,你对我真的很重要! 目录 前言 上一节的课后练习

docker运行onlyoffice,并配置https访问【参考仅用】

官方说明&#xff1a; Installing ONLYOFFICE Docs for Docker on a local server - ONLYOFFICEhttps://helpcenter.onlyoffice.com/installation/docs-developer-install-docker.aspx 一、容器端口、目录卷映射 sudo docker run --name容器名称 --restartalways -i -t -d -p…

#FPGA(基础知识)

1.IDE:Quartus II 2.设备&#xff1a;Cyclone II EP2C8Q208C8N 3.实验&#xff1a;正点原子-verilog基础知识 4.时序图&#xff1a; 5.步骤 6.代码&#xff1a;

零样本带解释性的医学大模型

带解释性的医学大模型 提出背景解法拆解方法的原因对比以前解法 零样本带解释性的医学大模型如何使用CLIP模型和ChatGPT来进行零样本医学图像分类用特定提示查询ChatGPT所生成的医学视觉特征描述相似性得分在不同症状上的可视化&#xff0c;用于解释模型的预测注意力图的可视化…

公众号回复idea能给出下载链接。

你可以使用字典来存储这些数据&#xff0c;然后在接收到消息时根据消息内容在字典中查找对应的回复内容。 这样做不仅可以更优雅地管理多组数据&#xff0c;还可以轻松地扩展和维护。msg parse_message(message) reply_dict {"idea": "https://pan.baidu.com/…

【数据结构】时间复杂度(加法乘法规则、渐近时间复杂度、循环时间复杂度总结

2.2 时间复杂度 什么是时间复杂度&#xff1f; 评估算法时间开销 T ( n ) O ( f ( n ) ) T(n)O(f(n)) T(n)O(f(n)) 在实际求解中&#xff0c;只留表达式中最高阶的部分&#xff0c;丢弃其他部分。 如何求解&#xff1f; 求解步骤 1.找到一个最深层的基本操作&#xff1b; 2.分…