Git使用与管理

一.基本操作

1.创建本地仓库

在对应文件目录下进行:

git init

输入完上面的代码,所在文件目录下就会多一个名为 .git 的隐藏文件,该文件是Git用来跟踪和管理仓库的。

我们可以使用 tree 命令(注意要先下载tree插件)来查看 .git 文件的细节:

创建完后我们一定要配置配置Git,设置用户名和邮箱地址:

git config [--global] user.name "***"   
git config [--global] user.email "***"  

global是一个选择选择项,填上这个表示这台机器上所有的Git仓库都会使用这个用户名和邮箱地址。

能设置自然也能删除配置:

 git config [--global] --unset user.namegit config [--global] --unset user.email

了解完配置与删除,我们可以使用下面的命令来查看配置:

git config -l

2.工作区、暂存区、版本库(重要)

工作区:我们在本地的目录;

暂存区(stage、index):一般存放在 .git 目录下的index文件;

版本库:隐藏目录 .git 。

我们在本地,也就是工作区创建的文件,可以通过add操作将文件上传到暂存区;我们可以使用commit命令将暂存区的文件上传到版本库中。从这里也可以看出,我们新创建的文件没有经过add和commit命令是没有添加到仓库中的。

//指定文件名,可写多个,用空格隔开
git add 文件名
//所有文件
git add .

通过这里的学习也解开了我之前的疑惑,那就是我在提交文件名有空格的文件时一直报错,原来用了空格表示不是一个文件了。如果真有空格,可以使用引号括起来;也可以使用 \ 来转义空格。

git commit -m "信息"
//指定文件到版本库中
git commit 文件名 -m "信息"

这里是信息指的是本次提交的细节。

通过上面两个步骤我们就将代码提交到版本库里了。我们可以使用下面的命令来查看历史提交记录:

git log [--pretty=oneline]

--pretty=oneline 是一个可选项,加上这个会使历史提交记录显示的更加简洁。

通过上面的命令我们会得到下面的内容:

4e65c55222473e05e72338d3ba75a101a6a56d56 First commit

前面这一堆数字和字母是commit id,这个很重要,下面会说到。

在使用上面的 tree .git 命令查看,我们可以看到objects中存入了commit id。

 在最上面的那张图上我们可以看到head指向master,我们查看以下master的内容,发现:

4e65c55222473e05e72338d3ba75a101a6a56d56

其中存着的正是上面的commit id。这个master存的正是最新的commit id。

下面着重说一下objects。

对一开始那张图进行补充:

objects 为Git的对象库,里面包含了创建的各种版本库对象及内容。

我们使用:ls .git/objects/ 来查看objects中的文件:

4e  70  e6  info  pack

为什么是这个,其实从树上就能得到答案。

我们可以通过:git cat-file 命令来查看版本库中的内容:

输入下面的命令:

git cat-file -p 4e65c55222473e05e72338d3ba75a101a6a56d56

我们得到了:

tree 70ea63592ac4de5f9aec6b15273c4dd5cc0cd00f

3.修改文件

查看在上次提交之后是否有对文件进行再次修改:

git status

查看工作区文件与暂存区或版本库文件的差异:

//工作区与暂存区差异
git diff [文件]
//工作区与版本库差异
git diff HEAD -- [文件]

4.版本回退

git reset 命令用于回退版本,其后面还有几个可选项:

git reset [--soft | --mixed | --hard] [HEAD]
工作区暂存区版本库选项
原本file1、file2file1、file2file1、file2
回退后file1、file2file1、file2file1--soft
回退后file1、file2file1file1--mixed
回退后file1file1file1--hard

其中 --mixed 是默认选项。

上面表格不难理解,举个例子如果我们使用了 --soft,那么只有版本库回退了,工作区和暂存区都没有回退。

HEAD选项:

commit id回退到指定版本
HEAD表示当前版本
HEAD^表示上一个版本
HEAD~1表示上一个版本
HEAD~2表示上上一个版本

5.删除文件

删除工作区和暂存区的文件:

git rm 文件名

二.分支管理

1.分支是什么

每次commit,git会根据时间形成一条“时间线”,这条时间线就是分支。git里面有一条主分支,master分支。HEAD指向master。

2.基本操作

1)查看分支

git branch

2)创建分支

git branch 分支名

比如我们创建一个dev分支:

此时再查看分支:

3)切换分支

git checkout 分支名

切换完后,HEAD就会指向切换的分支,比如我们切换到了dev分支:

 如果这个时候我们修改了某个文件,并且add和commit了,那么就会变成这样:

如果此时我们切回master,打开刚刚修改文件,我们就会发现文件没有被修改。原因从图上也能看出,master跟dev指向的根本就不是一个东西。修改的只是dev分支的文件,master分支没有被修改。

4)合并分支

像刚刚上面的例子,只有dev分支文件被修改了,我们想要将这个修改合并到master分支。

第一步,我们要先切换到master分支。

第二步,合并:

git merge dev

5)删除分支

git branch -d 分支名

这里要注意,我们要删除某一个分支,HEAD一定不能指向这个分支,如果指向这个分支是删不了的。

还有,如果这个分支的没有被合并,这个时候使用上面的方法是删不掉分支的,我们要这样写强制删除分支:

git branch -D 分支名

3.合并冲突

我们在dev分支修个了file1文件,同时也在master分支修改了file1文件,如果将这两个分支合并就会发生冲突,git根本就不知道该听谁的,是要dev分支的修改还是master分支的修改。这就是合并冲突。

我们的解决办法也很原始,手动删。

当出现冲突报错后,再打开file1文件就会发现文件内容变成这样了:

 <<< ==== >>>这些符号是用来向我们区分不同分支的冲突的。我们只需要留下我们真正需要的内容即可。

修改完后我们要再次add和commit一次,这个一定不能漏。

我们使用下面的命令也可以参看到这个结构:

 git log --graph --pretty=oneline --abbrev-commit

4.合并模式

在没有合并冲突的情况下,git会优先使用Fast forward模式。这个模式有一个问题,在我们删除合并完删除分支后,会丢失分支信息,我们无法知道最新的commit是不是合并出来的。

为了解决这个问题,我们要使用普通模式:

 
git merge --no-ff -m "" 分支名

三.远程操作

前面的操作其实都是在本地操作的,我们在实际开发时,不可能所有人都在一台设备上操作,每个人一台独立的设备,都在自己的设备上进行开发。这个时候就需要一个远程仓库,每个将写的代码提交到远程仓库中,远程仓库可以自己搭建,也可以是使用GitHub或Gitee等。

下面使用Gitee做示范。

1.克隆远程仓库

打开右上角克隆/下载,里面会有:

为什么可以选择使用上面的地址克隆。

这里只以HTTPS和SSH为例。

对于HTTPS,操作很简单,只需要将上面的地址复制:

git clone 地址

2.推送到远程仓库

将远程克隆到本地后,我们可以使用命令将本地仓库的代码推送到远程仓库中:

git push 远程主机名 本地分⽀名:远程分⽀名# 如果本地分⽀名与远程分⽀名相同,则可以省略冒号
git push 远程主机名 本地分⽀名

比较常见的就是下面这个:

git push origin master

3.拉取远程仓库

如果别人修改了代码并提交到远程仓库,我们要与远程仓库的代码同步,这个时候就要使用拉取操作了:

git pull 远程主机名 本地分⽀名:远程分⽀名# 如果本地分⽀名与远程分⽀名相同,则可以省略冒号
git pull 远程主机名 本地分⽀名

git pull 命令其实执行了两个操作,一个是从远程仓库拉取代码,一个是与本地分支合并。

4.配置git

1)忽略特殊文件

在我们初始化仓库的时候,我们添加了一个 .gitignore文件:

写入这个文件的文件在使用 git add . 时就不会一起提交了。

比如我们想忽略所有 .ini 结尾的文件,那么我们就可以写:

*.ini

如果我们在忽略的文件中 a.ini 我们是想让其提交的,这个时候我们可以写:

*.ini
!a.ini

2)命令配置别名

比如我们想给 git status 起一个别名:

git config [--global] alias.st status

此时我们使用 git st 与使用 git status 的效果是一样的。

我们配置完命令后,原来的命令还是可以用的,其与我们的配置是并存的。

四.标签管理

标签tag,可以简单的理解是某次commit的一个标识,相当于起了一个别名。

1.创建标签

先切换到要创建标签的分支,然后创建标签:

git tag 标签名

创建完后我们可以使用 git tag 来查看我们创建的标签,但是要注意标签不是按时间顺序列出,而是按字母排序的。

2.操作标签

删除本地标签:

git tag -d 标签名

删除远程仓库标签:

 git push origin :refs/tags/标签名

将本地标签推送到远程仓库:
 

git push origin 标签名
# 将全部标签推送
git push origin --tags

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

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

相关文章

计算机视觉——深度学习图像处理中目标检测平均精度均值(mAP)与其他常用评估指标

概述 平均精度均值&#xff08;mAP&#xff09;是目标检测领域中最为流行且复杂的重要评估指标之一。它广泛用于综合总结目标检测器的性能。许多目标检测模型会输出类似以下的参数结果&#xff1a; Average Precision (AP) [ IoU0.50:0.95 | area all | maxDets100 ] 0.3…

C语言中单链表操作:查找节点与删除节点

一. 简介 前面学习了C语言中创建链表节点&#xff0c;向链表中插入节点等操作&#xff0c;文章如下&#xff1a; C语言中单向链表&#xff1a;创建节点与插入新节点-CSDN博客 本文继续学习c语言中对链表的其他操作&#xff0c;例如在链表中查找某个节点&#xff0c;删除链表…

WePY 框架:小程序开发的“Vue式”利器!!!

WePY 框架&#xff1a;小程序开发的“Vue式”利器 &#x1f680; 哈喽&#xff0c;大家好&#xff01;&#x1f44b; 今天我们要聊聊一个在微信小程序开发中大放异彩的框架——WePY&#xff01;它是什么&#xff1f;有什么特点&#xff1f;为啥值得一试&#xff1f;别急&#…

什么是微前端?有什么好处?有哪一些方案?

微前端&#xff08;Micro Frontends&#xff09; 微前端是一种架构理念&#xff0c;借鉴了微服务的思想&#xff0c;将一个大型的前端应用拆分为多个独立、自治的子应用&#xff0c;每个子应用可以由不同团队、使用不同技术栈独立开发和部署&#xff0c;最终聚合为一个整体产品…

【家政平台开发(33)】库存管理模块开发实战:从基础搭建到智能管控

本【家政平台开发】专栏聚焦家政平台从 0 到 1 的全流程打造。从前期需求分析,剖析家政行业现状、挖掘用户需求与梳理功能要点,到系统设计阶段的架构选型、数据库构建,再到开发阶段各模块逐一实现。涵盖移动与 PC 端设计、接口开发及性能优化,测试阶段多维度保障平台质量,…

Mysql个人笔记

Mysql个人笔记 sql基础书写规则和种类种类书写规则注释规则启动 DDL数据类型数据库的操作useshowcreatedrop 表的操作useshowcreate创建表复制表 dropalter Mysql的存储引擎 DMLselectselect语句like&#xff08;谓词&#xff09;where聚合函数&#xff1a;关于nullgroup byexi…

【重装系统】大白菜自制U盘装机,备份C盘数据,解决电脑启动黑屏/蓝屏

1. 准备 U 盘 U 盘容量至少 8G&#xff0c;备份 U 盘的数据&#xff08;后期会格式化&#xff09; 2. 从微软官网下载操作系统镜像 https://www.microsoft.com/zh-cn/software-download/windows11 3. 下载安装大白菜 https://www.alipan.com/s/33RVnKayUfY 4. 插入 U 盘&#…

各类神经网络学习:(十)注意力机制(第2/4集),pytorch 中的多维注意力机制、自注意力机制、掩码自注意力机制、多头注意力机制

上一篇下一篇注意力机制&#xff08;第1/4集&#xff09;待编写 一、pytorch 中的多维注意力机制&#xff1a; 在 N L P NLP NLP 领域内&#xff0c;上述三个参数都是 向量 &#xff0c; 在 p y t o r c h pytorch pytorch 中参数向量会组成 矩阵 &#xff0c;方便代码编写。…

uni-app初学

文章目录 1. pages.json 页面路由2. 图标3. 全局 CSS4. 首页4.1 整体框架4.2 完整代码4.3 轮播图 swiper4.3.1 image 4.4 公告4.4.1 uni-icons 4.5 分类 uni-row、uni-col4.6 商品列表 小程序开发网址&#xff1a; 注册小程序账号 微信开发者工具下载 uniapp 官网 HbuilderX 下…

VBA将Word文档内容逐行写入Excel

如果你需要将Word文档的内容导入Excel工作表来进行数据加工&#xff0c;使用下面的代码可以实现&#xff1a; Sub ImportWordToExcel()Dim wordApp As Word.ApplicationDim wordDoc As Word.DocumentDim excelSheet As WorksheetDim filePath As VariantDim i As LongDim para…

MySQL运行一段时间后磁盘出现100%读写

MySQL运行一段时间后磁盘出现100%读写的情况&#xff0c;可能是由多种原因导致的&#xff0c;以下是一些常见原因及解决方法&#xff1a; 可能的原因 1. 磁盘I/O压力过大[^0^]&#xff1a;数据量过大&#xff0c;数据库查询和写入操作消耗大量I/O资源。索引效率低&#xff0c…

【RabbitMQ】延迟队列

1.概述 延迟队列其实就是队列里的消息是希望在指定时间到了以后或之前取出和处理&#xff0c;简单来说&#xff0c;延时队列就是用来存放需要在指定时间被处理的元素的队列。 延时队列的使用场景&#xff1a; 1.订单在十分钟之内未支付则自动取消 2.新创建的店铺&#xff0c;…

Linux笔记之Ubuntu系统设置自动登录tty1界面

Ubuntu22.04系统 编辑getty配置文件 vim /etc/systemd/system/gettytty1.service.d/override.conf如果该目录或者文件不存在&#xff0c;进行创建。 在override.conf文件中进行编辑&#xff1a; [Service] ExecStart ExecStart-/sbin/agetty --autologin yourusername --no…

C++程序诗篇的灵动赋形:多态

文章目录 1.什么是多态&#xff1f;2.多态的语法实现2.1 虚函数2.2 多态的构成2.3 虚函数的重写2.3.1 协变2.3.2 析构函数的重写 2.4 override 和 final 3.抽象类4.多态原理4.1 虚函数表4.2 多态原理实现4.3 动态绑定与静态绑定 5.继承和多态常见的面试问题希望读者们多多三连支…

算法训练之动态规划(三)

♥♥♥~~~~~~欢迎光临知星小度博客空间~~~~~~♥♥♥ ♥♥♥零星地变得优秀~也能拼凑出星河~♥♥♥ ♥♥♥我们一起努力成为更好的自己~♥♥♥ ♥♥♥如果这一篇博客对你有帮助~别忘了点赞分享哦~♥♥♥ ♥♥♥如果有什么问题可以评论区留言或者私信我哦~♥♥♥ ✨✨✨✨✨✨ 个…

$_GET变量

$_GET 是一个超级全局变量&#xff0c;在 PHP 中用于收集通过 URL 查询字符串传递的参数。它是一个关联数组&#xff0c;包含了所有通过 HTTP GET 方法发送到当前脚本的变量。 预定义的 $_GET 变量用于收集来自 method"get" 的表单中的值。 从带有 GET 方法的表单发…

jQuery多库共存

在现代Web开发中&#xff0c;项目往往需要集成多种JavaScript库或框架来满足不同的功能需求。然而&#xff0c;当多个库同时使用时&#xff0c;可能会出现命名冲突、功能覆盖等问题。幸运的是&#xff0c;jQuery提供了一些机制来确保其可以与其他库和谐共存。本文将探讨如何实现…

MySQL 中的聚簇索引和非聚簇索引有什么区别?

MySQL 中的聚簇索引和非聚簇索引有什么区别&#xff1f; 1. 从不同存储引擎去考虑 在MySIAM存储引擎中&#xff0c;索引和数据是分开存储的&#xff0c;包括主键索引在内的所有索引都是“非聚簇”的&#xff0c;每个索引的叶子节点存储的是数据记录的物理地址&#xff08;指针…

Java从入门到“放弃”(精通)之旅——启航①

&#x1f31f;Java从入门到“放弃 ”精通之旅&#x1f680; 今天我将要带大家一起探索神奇的Java世界&#xff01;希望能帮助到同样初学Java的你~ (๑•̀ㅂ•́)و✧ &#x1f525; Java是什么&#xff1f;为什么这么火&#xff1f; Java不仅仅是一门编程语言&#xff0c;更…

三相电为什么没零线也能通电

要理解三相电为什么没零线也能通电&#xff0c;就要从发电的原理说起 1、弧形磁铁中加入电枢&#xff0c;旋转切割磁感线会产生电流 随着电枢旋转的角度变化&#xff0c;电枢垂直切割磁感线 电枢垂直切割磁感线&#xff0c;此时会产生最大电压 当转到与磁感线平行时&#xf…