版本控制工具——Git

版本控制工具——Git

  • 前言
  • 一、版本库
  • 二、git的工作区域和文件状态
  • 三、添加和提交文件
  • 四、回退版本:git reset --模式 版本号
  • 五、查看差异:git diff
  • 六、从版本库中删除文件
  • 七、.gitignore:git中的特殊文件
  • 八、Git、GitHub跟Sourcetree的关系
  • 九、Github基础使用
  • 十、关联本地仓库和远程仓库
  • 十一、分支简介
  • 十二、解决冲突
  • 十三、rebase和回退
  • 十四、分支管理和工作流模型


前言

Git相关知识我是看的B站GeekHour老师的视频学的,亲测是我个人觉得讲得最能听懂的一位!推荐推荐(其他老师也都很厉害,是我太菜🥹),以下是做的学习笔记
GeekHour老师的一小时Git教程链接

一、版本库

版本库(仓库)简称Repo,可以理解为一个目录,这个目录下所有文件都可以被git管理起来,每个文件的修改、删除、添加等操作,git都能够跟踪到,以便任何时候都可以追踪历史或者还原到之前的某个版本
创建仓库的两种方式:
git init:在电脑本地创建仓库
git clone:从github这种远程服务器上克隆一个已经存在的仓库

二、git的工作区域和文件状态

git的本地数据分为三个区域:工作区(实际操作的本地工作目录)、暂存区(用于保存即将提交到git仓库的修改内容)和本地仓库(git存储代码和版本信息的主要位置)
在这里插入图片描述

三、添加和提交文件

git init:创建仓库

git status:查看仓库状态

git add:添加到暂存区,如:
git add file1.txt
git add *.txt 将当前文件夹下所有txt格式的文件都添加到暂存区
git add . 将当前文件夹下的所有文件都添加到暂存区

git commit:提交到仓库 (git commit -m"第二次提交")
【注】不加-m的话就会进入图形界面来进行提交
git log 查看仓库提交记录(git log --oneline可查看简洁的提交记录)

四、回退版本:git reset --模式 版本号

选择soft、hard、mixed三种模式,决定了在回退版本后,工作区和暂存区的内容是否会被清空:

工作区暂存区
git reset --soft不会清空不会清空
git reset --hard会清空会清空
git reset --mixed不会清空会清空

【注1】就算回退到原始版本了,也可以通过 git reflog命令查看各个版本号,再通过git reset来回到新版本号就行了
【注2】git reset --模式 HEAD^ 表示快捷地回退到上一个版本号

五、查看差异:git diff

查看工作区、暂存区、本地仓库之间的差异:
git diff:查看工作区与暂存区的差异,显示发生更改的文件以及更改的详细信息,没有返回内容就说明没有差异
git diff HEAD:比较工作区和库之间的差异
git diff CACHED:比较暂存区和库之间的差异
查看不同版本之间的差异:
git diff 版本号1 版本号2
git diff HEAD~ HEAD(或者git diff HEAD^ HEAD ):直接比较最新版本和上一个版本
git diff HEAD~2 HEAD:直接比较最新版本和上两个版本
git diff HEAD~ HEAD file1.txt:比较最新版本和上一个版本中file1.txt的差异
也可查看不同分支之间的差异

六、从版本库中删除文件

方式一:直接删除文件后提交
首先在本地工作区删除文件,再在暂存区中删除(使用的是add:git add .),再提交
方式二:git rm
在工作区、暂存区同时删除了

git rm file2.txt

【注1】一定要记得删除后要提交,库中的文件才会删除
【注2】git rm --cached file.txt就只会在版本库中将其删除

七、.gitignore:git中的特殊文件

让我们忽略掉一些不该被添加到版本库中的文件
一般会忽略掉 系统或软件自动生成的文件;编译产生的中间文件和结果文件;运行时生成日志文件、缓存文件、临时文件;涉及身份、密码、口令、秘钥等敏感信息文件

举例:将access.log这个文件忽略掉:

echo access.log>.gitignore

【注】.gitignore生效有个前提:这个文件不能是已经被添加到版本库中的文件,要想忽略它就必须先从库中删除

八、Git、GitHub跟Sourcetree的关系

Git是基础的版本控制工具;GitHub是基于Git构建的线上社区和仓库托管平台,让开发者能够相互协作和分享;而Sourcetree则是为了简化和提升Git操作体验的图形化客户端工具

九、Github基础使用

生成SSH KEY
克隆仓库:git clone github上的仓库名
在本地库中更新文件,使用git push推送更新的内容
拉取更新内容:git pull

十、关联本地仓库和远程仓库

本地已经有了一个仓库,怎么放到远程仓库:
cd到该仓库地址下
依次复制粘贴运行github上提示的代码:

git remote add origin git@github.com:geekhall-laoyang/first-repo.git
git branch -M main
git push -u origin main

十一、分支简介

多个开发人员可以在自己的分支上进行开发工作,最后再合并到主线上,或者建立一个问题修复的分支来处理一些bug和缺陷,这样就可以让主线代码仓库始终处于一个稳定状态,让每个人员可以独立地开发和测试
git branch :查看当前处于哪个分支上,并且一共有哪些分支
git branch 分支名 : 可以创建一个分支,但此时还没有切换到该分支上
git switch 分支名 :可以切换到该分支上
git merge 分支名 :切换到main分支上后,使用该命令可以将指定的分支合并到main上
git branch -d 分支名 : 删除已经合并到main上的某个指定分支
git branch -D 分支名 :强制删除某个指定的分支,就算它没有合并到main也可以删除

十二、解决冲突

如果两个分支有重复内容的话(两个分支修改了同一个文件的同一行代码),git就不知道该保留哪个分支的修改内容了,也就产生了冲突,就需要手动去解决
在这里插入图片描述

十三、rebase和回退

rebase:变基
git rebase 分支名
什么情况下使用rebase:一般来说,如果只是想把两个分支合并起来而不关心提交历史,那就使用merge,如果确定只有自己一个人在这个分支上进行开发,且希望提交历史更直观明了一些就使用rebase
1、merge要先切换到main分支上再执行merge操作,而rebase可以在任意分支上执行
2、merge优点:不会破坏原分支的提交历史,方便回溯和查看;merge缺点:会产生额外的提交节点,分支图比较复杂
3、rebase优点:不会新增额外的提交记录,会形成线性历史,比较直观干净;rebase缺点:会改变提交历史,改变了当前分支的节点,避免在共享分支时使用(一般不会在公共的分支上执行rebase操作)

回退:
将某个已删除的指定分支恢复到某个指定提交时间点的状态:git checkout -b 分支名 提交id
(将仓库恢复到指定提交时间点的状态使用上述的reset)

十四、分支管理和工作流模型

1、常见的工作流模型:
GitFlow模型:
在这里插入图片描述
GitHubFlow模型:
在这里插入图片描述
2、分支的命名规范
推荐使用带有意义的描述性名称来命名分支
版本发布分支/Tag示例:v1.0.0
功能分支示例:feature-login-page
修复分支示例:hotfix-#issueid-desc

3、分支管理
定期合并已经成功验证的分支,即使删除已经合并的分支,保持合适的分支数量,并为分支设置合适的管理权限

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

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

相关文章

基于 Python 的漏洞扫描系统,附源码

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

【Python】使用 requirements.txt 与 pytorch 相关配置

【Python】使用 requirements.txt 与 pytorch 相关配置 前言一、pip1、导出结果含有路径2、导出不带路径的 二、Conda1、导出requirements.txt2、导出yml 文件 三、第三方包:pipreqs(推荐)1、创建并激活conda环境2、安装requirements文件的pi…

金融信贷风控评分卡模型

评分卡模型概念 评分模型是根据借款人的历史数据,选取不同维度的数据类型,通过计算而得出的对借款人信用情况打分的模型。不同等级的信用分数代表了借款人信用情况的好坏,以此来分析借款人按时还款的可能性。 评分卡模型分类 A卡&#xff…

揭开Markdown的秘籍:标题|文字样式|列表

🌈个人主页:聆风吟 🔥系列专栏:Markdown指南、网络奇遇记 🔖少年有梦不应止于心动,更要付诸行动。 文章目录 📋前言一. ⛳️Markdown 标题二. ⛳️Markdown 文字样式2.1 🔔斜体2.2 &…

Netty连接通道中的Channel参数模型

ChannelOption(Channel中的连接参数) ChannelOption.SOBACKLOG ChannelOption.SO_BACKLOG对应的是tcp/ip协议listen函数中的backlog参数,服务端处理客户端连接请求是顺序处理的,所以同一时间只能处理一个客户端连接,多个客户端来的时候&…

代理与Reflect反射

属性描述符 Proprety Descriptor 属性描述符 用于描述一个属性的相关信息 1.Object.getOwnPropertyDescriptor(对象,属性名) 可以得到一个对象的 某个属性的属性描述符 Object.getOwnPropertyDescriptors(对象) 可以得到某个对象的所有属性描述符 如果需要为某个…

node.js基础-02

Author nodes:(题记) Hypertest Transfer protocol is very important to programming personnel。it doesnt matter if youre a front-end engineer or a back-end engineer.So,lets study it together. http协议对于编程工程师很重要&am…

基于华为云欧拉操作系统(HCE OS)单节点容器化部署(Prometheus、node-exporter、Grafana)应用性能监控平台

写在前面 博文内容为 华为云欧拉操作系统入门级开发者认证(HCCDA – Huawei Cloud EulerOS)实验笔记整理认证地址:https://edu.huaweicloud.com/certificationindex/developer/9bf91efb086a448ab4331a2f53a4d3a1内容涉及,HCE OS 容器化部署(Prometheus、…

【C++修行之道】(引用、函数提高)

目录 一、引用 1.1引用的基本使用 1.2 引用注意事项 1.3 引用做函数参数 1.4 引用做函数返回值 1.5 引用的本质 1.6 常量引用 1.7引用和指针的区别 二、函数提高 2.1 函数默认参数 2.2函数占位参数 2.3 函数重载 2.4函数重载注意事项 一、引用 1.1引用的基本使用 …

【canvas】获取鼠标点击位置坐标的颜色信息

在项目当中,要实现某业务需求例如PS魔棒功能时,则需要获取点击坐标的颜色信息。 功能不复杂,代码也很少,一看便知~~ 核心API为getImageData,传入4个参数,前2个为点击坐标xy,后2个都传1&#xf…

那些 C语言指针 你不知道的小秘密 (3)

本篇会加入个人的所谓‘鱼式疯言’ ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 我会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. 🤭🤭🤭可能说的不是那么严谨.但小编初心是能让更多人能…

vscode连接ssh报错

关于vscode更新版本至1.86后,导致无法连接服务器问题的记录 原因:vscode1.86更新了对glibc的要求,需要最低2.28版本,导致各种旧版本的linux发行版(比如最常见的centos 7)都无法用remote-ssh来连接了&#…

Linux探秘之旅:透彻理解路径、命令与系统概念

目录 如何远程连接 远程登录简明指南 linux区别 1.严格区分大小写 2.linux的命令返回结果判断 3.如何查看网络信息 4.关于后缀名(Linux不关心文件后缀) 4.1 需要记忆的后缀 5.echo命令 6.linux一切皆文件 6.1比如磁盘的文件 6.2可执行文件 …

nginx + DNS域名解析

配置链接: Nginx 安装配置 | 菜鸟教程 安装完nginx后,访问: cd /usr/local/nginx/sbin/ 然后使用./nginx可使用nginx。 访问:http://服务器的ip地址后出现 因为访问IP地址很繁琐,需要记忆ip的数字地址,因此需要给它一个通俗的…

如何在Sprint中管理UI测试?

作为iOS团队,我们编写3种类型的UI测试。如果你问这些是什么;快照、冒烟和回归测试。那么这些测试到底是什么?让我们稍微谈谈这些。 快照测试快照测试是检查UI中的某些内容是否损坏的测试。 首先,它将所需的视图图像保存在某处&am…

Lombok 高级说明

优质博文:IT-BLOG-CN 一、痛点 【1】代码臃肿:POJO中的getter/setter/equals/hashcode/toString等; 【2】样板式代码:I/O流的关闭操作等; Lombok是一个可以通过注解简化Java代码开发的工具,能够在我们编…

string容器

1. string基本概念 1.1 本质: string是C风格的字符串,而string本质上是一个类 string和char * 区别: char * 是一个指针 string是一个类,类内部封装了char*,管理这个字符串,是一个char*型的容器。 1.2 特点…

书生·浦语大模型全链路开源体系

参考:https://www.bilibili.com/video/BV1Rc411b7ns/?spm_id_from333.788&vd_source3bbd0d74033e31cbca9ee35e111ed3d1 背景: 人工智能的发展从针对特定任务,用一个模型解决一个问题过渡到一个模型来应对多模态、多任务,大模…

K210如何下载程序

一、打开资料包里提供的K-Flash程序烧录软件 二、选择串口 三、选择波特率 四、选择In-Chip,烧录到Flash芯片里面,重新上电还会运行程序 五、如果选择In - Memory,这次可以运行,但下次重新上电就不会保持这次的程序了。 六、选择固…

springboot+vue居民小区设备报修系统

小区报修系统可以提高设施维护的效率,减少机构的人力物力成本,并使得维修人员可以更好地了解维护设备的情况,及时解决问题。 对于用户来说,报修系统也方便用户的维修请求和沟通,提高了用户的满意度和信任。其次小区报修…