8、VS中Git使用

VS中Git使用

  • 1.基础操作
    • 1.1 VS配置Git
    • 1.2 操作界面
  • 2.本地库版本管理
    • 2.1 创建管理本地库
    • 2.2 暂存、存储
    • 2.3 提交
    • 2.4 版本切换
  • 3.分支操作
    • 3.1 分支应用
    • 3.2 新建分支
    • 3.3 合并分支、解决冲突
    • 3.4 删除分支
  • 4.远程库版本管理
    • 4.1 新建、克隆
    • 4.2 提取、拉取、推送与同步
    • 4.3 团队开发

最新VS默认提供了对Git的支持。
Git 是使用极广泛的新式版本控制系统。 使用 Git,可以跟踪一段时间内对代码所做的更改,并且可以还原到特定版本。
GitHub作为远程库,可用于团队内协作和团队外协作。

1.基础操作

1.1 VS配置Git

选择 VS2019 顶部的菜单项(工具 —> 选项),在弹出的对话框中,从左侧选择 ”源代码管理“,从右侧的下拉框中选择 Git.
在这里插入图片描述
然后发现左侧多出来了一些跟 Git 配置有关的选项,从左侧选择 “Git 全局配置” 这个选项,在右侧填写用户名和邮箱,这里可以随便填写,这个主要是用来在版本历史记录中识别用户身份(识别是哪个用户提交的版本)。
在这里插入图片描述
然后点击确定,保存配置成功后,就会发现在 VS顶部菜单上,多出来了一个 Git 菜单,这说明 VS集成 Git 配置成功。
在这里插入图片描述

1.2 操作界面

菜单栏中设有Git栏,可以进行基础设置和操作。
视图:
git更改:当工作区文件发生变化时,显示变换内容以及提交。也可以用于处理 拉取、暂存、提交、推送、合并等操作。
git存储库:当前版本和分支的变换历史记录,以视图的形式呈现。
在这里插入图片描述
主界面右下角显示未推送的提交、挂起的更改、当前操作的文件以及当前操作的分支。
在这里插入图片描述

2.本地库版本管理

2.1 创建管理本地库

  1. 创建配置新项目并利用Git管理
    先使用 VS 创建一个控制台项目,设定项目存储路径。由于只创建一个简单的演示项目,为了查看方便,所以我将解决方案和项目放在同一个目录中了。在实际工作中的绝大部分场景中,我们都会在一个解决方案下创建多个项目,所以在实际工作中,不要勾选 “将解决方案和项目放在同一个目录中”。
    在这里插入图片描述
    选择解决方案,通过鼠标右键菜单,选择 “创建 Git 存储库”。
    在这里插入图片描述
    在弹出的对话框中,左侧选择 “仅限本地”,右侧的本地路径,默认就是项目所在的文件夹,然后点击 “创建” 即可。
    在这里插入图片描述
    项目所在目录中的文件,有了被托管的绿色图标,在 VS的解决方案下,文件前面也有了 “小锁” 的标志,这说明项目的代码已经被 Git 进行版本管理,工作目录已经创建成功。
    在这里插入图片描述
    当文件发生变化时,文件前面小锁变为对号。
    在这里插入图片描述
    当添加新文件后,文件前将显示加号。
    在这里插入图片描述

2.2 暂存、存储

在VS中,暂存是指“git add”,存储是指“git stash”。
改动文件点击“+”后,会归到【暂存更改】的节点下。然后才能提交和推送。
在有文件改动后,点击提交按钮右边的箭头,在下拉菜单中能看到【全部存储(T)(–include-untracked)】和【全部存储并保持暂存(S)(–保留索引)】
在这里插入图片描述
简单的说,就是将当前更改保存起来,或者理解为打包藏起来。并没有提交

【全部存储(T)(–include-untracked)】:就是字面意思,全部存储,傻瓜式,管你是暂存还是更改。后面括号中的(–include-untracked),就是包含非追踪文件,就是即使“.gitignore”中已经忽略的文件发生更改,也存。存储结果就是你的【更改数】【暂存更改】节点下所有东西都被保存且不在显示。

【全部存储并保持暂存(S)(–保留索引)】:类似与全部存储,但“并保持暂存”是说,之前点过“+”,在【暂存更改】下的虽然会被存储,但不会被清理。方便你的下一步提交操作。所谓“–保留索引”是什么意思呢,索引就是当“git add”(点“+”)之后,这些更改就会生成版本号,或者叫索引,由一串字符表示。

存储后如何应用呢?
在【Git更改】窗口中的【存储】节点下,右击某一条存储,弹出的菜单中,【应用】就对应前面提到的“git stash apply”;【弹出】 就对应前面提到的“git stash pop”;【放下】就是丢弃删除某个存储的意思。

应用场景:
1 当正在dev分支上开发某个项目,这时项目中出现一个bug,需要紧急修复,但是正在开发的内容只是完成一半,还不想提交,这时可以用git stash命令将修改的内容保存至堆栈区,然后顺利切换到hotfix分支进行bug修复,修复完成后,再次切回到dev分支,从堆栈中恢复刚刚保存的内容。
2 由于疏忽,本应该在dev分支开发的内容,却在master上进行了开发,需要重新切回到dev分支上进行开发,可以用git stash将内容保存至堆栈中,切回到dev分支后,再次恢复内容即可。
总的来说,git stash命令的作用就是将目前还不想提交的但是已经修改的内容进行保存至堆栈中,后续可以在某个分支上恢复出堆栈中的内容。这也就是说,stash中的内容不仅仅可以恢复到原先开发的分支,也可以恢复到其他任意指定的分支上。git stash作用的范围包括工作区和暂存区中的内容,也就是说没有提交的内容都会保存至堆栈中。

git stash //能够将所有未提交的修改(工作区和暂存区)保存至堆栈中,用于后续恢复当前工作目录。
git stash save //作用等同于git stash,区别是可以加一些注释  git stash save "test"
git stash list //查看当前stash中的内容
git stash pop //将当前stash中的内容弹出,并应用到当前分支对应的工作目录上。
git stash apply + stash名字 //将堆栈中的内容应用到当前目录,不同于git stash pop,该命令不会将内容从堆栈中删除,也就说该命令能够将堆栈的内容多次应用到工作目录中,适应于多个分支的情况。
git stash drop + 名称  //从堆栈中移除某个指定的stash
git stash clear //清除堆栈中的所有 内容
git stash show //查看堆栈中最新保存的stash和当前目录的差异。
git stash branch  //从最新的stash创建分支。

2.3 提交

将文件的改动提交都本地库中进行管理。

git commit -m "" 文件名

在这里插入图片描述

2.4 版本切换

在需要更改版本的上右击,点击“查看历史版本”
在这里插入图片描述
在这里插入图片描述

  • git reset soft、mixed和hard的区别

soft (软),仅仅移动版本库HEAD指针,其他什么事都不做,即索引文件(暂存区)、工作区不会重置
在这里插入图片描述

mixed(混合)reset默认的,不指定reset类型就是它,移动版本库HEAD指针,重置暂存区,但不重置工作区。就比如说你从当前版本回退到历史版本,你工作区更改的文件和代码都是不会变成历史版本的。
在这里插入图片描述

hard(硬),移动版本库HEAD指针,重置暂存区和工作区。彻底回退到某个版本,本地的代码也会变为某个版本的内容,此命令慎用! 如果真要使用,建议先commit提交一份到本地库里,后悔再git reset回去
在这里插入图片描述

  • VS中对第二个历史版本commit进行重置>删除更改处理,会删除第一个commit版本。但是通过git bash命令窗可以恢复。
  • 对于第二个版本利用保留更改,然后撤销更改即可恢复到当前选定的事先版本。该功能也能实现跨版本的功能修改。
    在这里插入图片描述

3.分支操作

3.1 分支应用

在实际项目开发过程中,我们会经常遇到这样的情景:master 主分支的代码已经测试通过,编译发布到公网正式环境了,接下来我们需要开发新的需求功能,此时我们是在 master 主分支上继续开发新需求功能,还是新创建一个分支开发新需求功能?
这主要根据你所要开发的新需求功能的 任务量大小 和 复杂程度 而定。
大部分情况下,我们实际工作中开发的新需求功能,工作量都会比较大,复杂程度也较高,需要花费时间也较长,此时最好创建一个新分支来开发新需求功能,最好让 master 分支的代码版本始终保持跟发布到公网正式环境的版本一致,这样做的好处很多。万一新功能在开发过程中,运营人员反馈了公网环境中的一些 bug,万一产品经理或者领导要求临时调整一下公网上的一些界面或功能等等,此时通过修改 master 主分支的代码,我们就可以快速响应并及时发布。等新的功能需求开发完毕测试无误,发布到公网正式环境后,我们就可以考虑合并分支,或者直接把新的分支作为主分支。

3.2 新建分支

在 VS 的顶部菜单中,选择 "Git —> 新建分支 ".
在这里插入图片描述
弹出如下对话框,录入新分支的名称 dev ,勾选上 “签出分支” 对话框,点击 “创建” 即可。
在这里插入图片描述

3.3 合并分支、解决冲突

分别在master和hot_fix分支中修改部分内容,然后合并分支。合并的过程中会产生冲突,通过自主修改或者自带的git解决冲突。
在这里插入图片描述
合并完成后,由于我们在 master 分支和hot_fix分支上,同时更改了文件,所以 文件就有合并冲突,文件前面的图标也发生了变化,打开 Program.cs 文件可以看到冲突的细节.
在这里插入图片描述
此时我们有两种途径来解决冲突:

  1. 直接修改文件,编译没有问题后,提交即可。
  2. 鼠标选择文件,点击鼠标右键菜单 “Git --> 解决”。

我们将 文件修改完成后,编译运行测试没有问题后,点击 “接受合并” 即可,然后将合并后的 文件提交到 master 版本库. 打开合并编辑器
在这里插入图片描述
可以在文件中修改后,调试查看结果。如果满足要求则“接受合并”。

3.4 删除分支

此时 分支就没有什么用处了,我们可以把 分支进行删除,在 VS顶部菜单中,选择 “Git --> 管理分支”,打开如下界面,选择 分支,通过鼠标右键菜单选择 “删除” 即可。
在这里插入图片描述

4.远程库版本管理

4.1 新建、克隆

从新建远程代码仓库,到克隆、拉取、推送、管理分支,基本都能通过VS完成。
在这里插入图片描述
克隆完成后,同时完成了:1、拉取代码;2、初始化本地库;3、创建别名。
通过行命令clone也可以,然后采用VS打开本地库进行操作,也能进行正常的远程库管理。

4.2 提取、拉取、推送与同步

在这里插入图片描述
在这里插入图片描述
在菜单栏和git更改视图中都可以操作。

  • 提取(fetch):从远程获取最新版本文件到本地,不自动合并,最新版本在“分支”选项中的“remotes/origin”文件夹下可以查看,可以选择将其合并到master分支上。
  • 拉取(pull)从远程仓库拉取最新版本文件到本地,自动合并/merge。
  • 推送(push)即将本地仓库上传至云端.
  • 同步包括拉取和推送两个步骤.

提取不会自动合并或覆盖本地代码,而是将其储存在分支选项卡中,供开发者自行选择合并,可以避免云端与本地一些代码起冲突时的数据丢失。而拉取则是暴力合并,如果该项目仅由你一人进行开发,那么用拉取更方便,因为没有其他人的改动,但如果是和团队一起协作开发则建议用提取,避免引起不必要的冲突。
同样地,如果是一人开发项目,或者仅仅是想同步本地代码到云端,那推送就足够了。但如果是团队协作开发,那么强烈建议使用同步,即先拉取再推送,不然可能会出现如下情况的提示,即项目中其他部分未和最新的云端仓库保持一致。

4.3 团队开发

  • 创建新的分支进行开发
    这是一个常见的开发实践,每个开发者都在自己的分支上进行工作,而不是直接在主分支上开发。这样可以防止不同开发者的改动直接冲突。
  • 定期拉取和推送代码
    开发者需要定期从远程仓库拉取最新的代码,并将自己的代码推送到远程仓库。这样可以确保开发者始终基于最新的代码进行开发,减少冲突的可能性。

当你从远程仓库拉取最新代码并在其基础上进行开发时,其他开发者可能也在同时进行他们的开发工作。当你准备提交(push)你的代码时,的确可能会发生版本冲突。这是因为在你的开发过程中,源代码已经被其他开发者更新了。
这就是为什么定期拉取(pull)和推送(push)代码是很重要的。定期拉取最新的代码可以帮助你尽早发现和解决冲突,减少最后阶段的复杂性。如果你只在开发完成时才拉取最新代码,那么可能会遇到很多冲突,需要花费大量时间来解决。
当你准备提交你的代码时,你应该首先从远程仓库拉取最新的代码,然后合并(merge)到你的开发分支。这时,你可能会发现一些冲突。这些冲突需要你手动解决,Git提供了工具来帮助你标识和解决这些冲突。一旦冲突解决,你就可以将你的代码推送到远程仓库。
详细操作步骤如下:

  1. 切换到主分支。
  2. 从远程仓库拉取最新的代码。
  3. 切换回开发分支。
  4. 将主分支的新提交合并到你的分支。
  5. 解决完所有冲突后,你需要添加所有解决了冲突的文件,提交这次冲突解决。
  6. 将你的分支推送到远程仓库。

这样,你的分支就包含了所有在你开发过程中主分支上的新提交,同时也包含了你自己的更改。

note:如果发生了拉取的冲突。则将软件版本回溯到之前有联系的版本,与远程库建立联系之后,然后将新的更改再合并到分支中去。

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

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

相关文章

深入Pandas(二):高级数据处理技巧

文章目录 系列文章目录引言时间序列分析可视化示例 高级数据分析技术分组与聚合操作时间序列分析 高级数据操作数据合并与重塑示例:数据合并merge示例:数据合并concat示例:数据重塑 - 透视表 高级索引技巧 结论 系列文章目录 Python数据分析…

30、共空间模式CSP与白化矩阵

CSP算法和PCA降维都涉及到了白化,那白化的目的和作用到底是啥呢? 矩阵白化目的: 对于任意一个矩阵X,对其求协方差,得到的协方差矩阵cov(X)并不一定是一个单位阵。 下面介绍几个线代矩阵的几个概念: 1、…

[蓝桥杯学习] 树状树组

lowbit操作 数字二进制表达中的最低位1以及后面所有的0,函数写法如下: int lowbit(int x){return x&-x;} 例如说,lowbit(0101100100) (100) lowbit(4) 4 lowbit(6) 2 时间复杂度o(1) 树状数组 应用 进行单点修改和区间查询…

Hadoop集群三节点搭建(二)

一、克隆三台主机(hadoop102 hadoop103 hadoop104) 以master为样板机克隆三台出来,克隆前先把master关机 按照上面的步骤克隆其他两个就可以了,记得修改ip和hostname 二、编写集群同步脚本 在/home/attest/ 创建bin目录&…

论文解读:A New CNN Building Block for Low-ResolutionImages and Small Objects

引言 之前通过stride和pooling这些下采样操作,但是这些操作都会或多或少丢失图像的信息,所以这不适用于具有低分辨率图像和小物体的更困难的任务上。像池化选择maxpooling或者是averagepooling、卷积的步长(太大的话会丢失信息)都是很头疼的问题&#x…

I.MX6ULL开发笔记(二)——硬件外设操作

0x01 点亮第一个RGB灯 在文章http://t.csdnimg.cn/EGWt9中有介绍Linux下文件目录,那么在Linux系统下,RGB灯也是一个设备,所以我们需要到/sys目录下去操作这个设备。 之后,我们进入到class目录,这里挂载着开发板上的外…

Qt qDebug基本的使用方法详解

目录 qDebug基本用法输出字符串输出变量值1输出变量值2支持流式输出输出十六进制去除双引号和空格调试输出级别 自定义类型输出自定义日志信息的输出格式示例占位符设置环境变量 关闭QDebug输出Qt工程VS工程 在VS工程中如何查看qDebug输出 DebugView下载 qDebug基本用法 qDebug…

大学生如何当一个程序员——第三篇:热门专业学习之路1

第三篇:热门专业学习之路1 1.JAVASE2.数据库3.网页设计和开发4.Servlet/ JSP和企业级项目开发5.SSM框架(Spring、Spring MVC、Mybatis)6.各种JAVA新技术和大型项目的整合7.微服务架构8.一定要做一个大项目! 各位小伙伴想要博客相关…

Python如何实现微信支付功能代码示例

微信支付是一种基于互联网的移动支付服务,由中国的即时通讯工具微信提供。用户可以通过微信支付在微信平台上进行在线支付、转账和收款。微信支付支持多种支付方式,包括银行卡支付、微信钱包余额支付、扫码支付等。用户可以用微信支付购买商品、支付账单…

SpringBoot Redis入门(一)——redis、Lettuce、Redisson使用

本章:将展示SpringBoot集成Redis三种客户端的配置要点和常见应用示例;下章:自行实现一个方法级的缓存注解,简化版的Cacheable,使初学者加深对Spring缓存框架的理解。 一、Lettuce客户端 Lettuce 是一种可扩展的、线程…

pytest-yaml 测试平台-4.生成allure报告,报告反馈企业微信、钉钉、飞书通知

前言 定时任务执行完成后生成可视化allure报告,并把结果发到企业微信,钉钉,飞书通知群里。 生成allure报告 添加定时任务 执行完成后生成allure报告 查看报告详情 报告会显示详细的request 和 response 详细信息 也可以查看log日志 …

数据结构 模拟实现Queue队列(双链表模拟)

目录 一、队列的概念 二、队列的接口 三、队列的方法实现 (1)offer方法 (2)poll方法 (3)peek方法 (4)size方法 (5)isEmpty方法 四、最终代码 一、队…

域名转移:将腾讯云转移至阿里云

当时注册域名时,腾讯域云相对便宜,但目前阿里云在业界更加成熟,因此将自己申请的域名由阿里云转移至阿里云,并记录转移过程。 一、域名转出 进入腾讯云,登陆后选择控制台,选择我的资源–域名注册–全部域名…

Android WiFi基础概览

Android WiFi 基础概览 1、WiFi协议2、Android WLAN 架构2.1 应用框架2.2 Wi-Fi 服务2.3 Wi-Fi HAL 3、相关编译 android13-release 1、WiFi协议 Wi-Fi(无线通信技术)_百度百科 2.4GHz 频段支持以下标准(802.11b/g/n/ax)&#xff…

科锐16位汇编学习笔记 04 乘除和移位指令

乘法和除法指令用的不多,因为效率很低 比较指令CMP (compare) •格式:CMP OPD,OPS •功能:(OPD) — (OPS),跟减法指令很像,但是不存结果 •说明:目的操作数减去源操作数,然后根据结果设置标志位,但该结…

作业三详解

作业3: 在作业1的基础上,整合修改、删除功能,可实现如下功能 1.进入新增页面,页面填入新增数据,提交表单,然后跳转到查询列表页面,列表页面显示所有记录(多一条新增的数据) 2.进入修改增页面,页面填入修改数据,提交表单,然后跳转到查询列表页面,列表页面显示所有…

Zoho SalesIQ:构建客户服务知识库的实用工具与指南

客服人员每天都有很多事情要做,包括在线聊天、音频通话、屏幕共享和发送电子邮件。为什么要将搜索常用信息添加到他们列表中呢?因为客户在遇到问题的同时想快速解决问题。所以,我们要使用Zoho SalesIQ客服系统构建客户服务知识库。 一、什么…

鸿蒙开发之拖拽事件

一、拖拽涉及的方法 Text(this.message).fontSize(50).fontWeight(FontWeight.Bold)//拖拽开始.onDragStart((event: DragEvent) > {console.log(drag event onDragStartevent.getX())})//拖拽进入组件范围,需要监听onDrop配合.onDragEnter((event: DragEvent) …

【MongoDB】MongoDB查询语句find的使用,和提高查询速度的游标的使用,非常详细!!!

😁 作者简介:一名大四的学生,致力学习前端开发技术 ⭐️个人主页:夜宵饽饽的主页 ❔ 系列专栏:MongoDB数据库 👐学习格言:成功不是终点,失败也并非末日,最重要的是继续前…

联合体类型和枚举类型

联合体 联合体类型的声明 像结构体⼀样,联合体也是由⼀个或者多个成员构成,这些成员可以不同的类型。 联合体的特点是所有成员共⽤同⼀块内存空间。所以联合体也叫:共⽤体。 所以给联合体其中⼀个成员赋值,其他成员的值也跟着…