git常用操作汇总大全

news2025/3/12 19:33:11
  • 👏作者简介:大家好,我是爱吃芝士的土豆倪,24届校招生Java选手,入职小红书广告投放开发,很高兴认识大家
  • 🔥如果感觉博主的文章还不错的话,请👍三连支持👍一下博主哦
  • 🍂博主正在努力完成2024计划中:校招入职,稳扎稳扎
  • 📝联系方式:nhs19990716,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬👀

前言

对于程序员来说,熟练的掌握git操作是最基本的东西了,只不过会被大多数校招生或者刚工作的人所遗漏,总是过分的关注技术,但是连基本的git操作都不曾熟练掌握,因此本文章在这里为大家介绍一下。

工作中git基本操作

git配置

首先需要安装git 并且配置 git的一些基本信息(这些信息一般公司都会提供,所以按照公司要求配置即可)

idea中使用git拉项目

一般来说 配置好了以后,从idea中远程 clone到本地,需要,file --> new --> Project from Version Control 填写好对应的clone地址即可。

此时项目就clone下来了。其实针对git来说 操作其实就有数的几个 add commot push,以及每次都要去master pull下来最新的分支。但是针对这种情况又会有多种操作,比如说merge 和 rebase(重点)。

git约定俗成

按照约定俗成,一般来说,每次开发新需求都要新建一个新的分支,具体的分支命名要按照项目 + 团队的风格!!!(这个很重要)

新分支都是从master创建的,理论上新分支push上的版本其实是优先于master的,但是会出现这样的一种情况,因为大家都是多个分支并行开发,别人的分支合并进master,而你自己的分支还是依赖于之前的master。

出现以上这种问题,说明master分支的代码领先于自己的分支,此时需要将master分支代码合并到自己的分支上。因为在我的分支正在开发中,同事完成的分支被合并了,此时的master又被更新了一次,而我的分支仍然是没有合并同事之前的master,所以此时我的分支就落后于master了,所以此时我需将master上的新代码合并到我自己新建的分支上来。

这个其实就涉及到了两个比较关键的技术了,merge 和 rebase。

git stash

git stash的功能其实概括起来就是,当前的分支还没有commit,但是需要切出去,所以需要暂存下这些修改,毕竟如果还没有commit的话,你切出去,实际上本次修改的代码其实就没有了,通过这种方式,可以很方便的切出去,等到切回来的时候,使用git unstash即可。

给大家举一个例子吧。

比如说你正在开发一个新分支,但是远程的master更新了,但是你本地的master还没有更新,那么你提交代码的时候,你肯定是要和线上最新的master合并了,然后再提交自己的新分支呀。那么这个其实就能用到了git stash了。

首先git stash,然后切换master,然后pull master更新,然后切换回去新分支,git unstash,然后merge合并master的变更,然后解决文件冲突,然后push,这样就能保证新分支时依赖于最新的master版本。

merge的常见问题

修改远程仓库代码:

在这里插入图片描述

修改本地仓库代码:

在这里插入图片描述

提交本地仓库代码并拉取,发现代码产生冲突,点击Merge进行合并:

在这里插入图片描述

点击箭头将左右两侧代码合并到中间区域:

在这里插入图片描述

冲突合并完成后,点击Apply生效:

在这里插入图片描述

提交代码并推送到远程。

git提交版本

点击idea左侧的git就能看到各个分支的版本历时树了。

单击左下角git即可。还是和 git stash相关的是,如果切换出去分支就要add commit一次,那么其实就会在git 提交版本历史中有一个不美观的版本结构树。因此还是需要广泛使用git stash 和 git unstash

git 回滚

这个功能是有的时候,一不小心在master分支上,git unstash了一下,导致错误了merge冲突,这个时候,完全可以点击 git rollback,然后回滚回去就可以了。

git 更新最新的分支情况

b新分支push上去了,a分支待合并,但是在merge中找不到对应push上去的b分支,针对这种情况,需要在idea上的控制台输入:git fetch

新分支每次push前是基于最新的master

每次push分支之前,都需要和 master merge一下,防止给别人带来额外的merge冲突。

merge 和 rebase(具体内容都是参考博客:流浪在世界的博客内容,图片也是借用,再次声明!!!)

rebase本质点来说可以使得你的代码的版本提交树是线性的,而merge却不是,会有很多分叉,感觉不太美观,当然最终怎么样取决于 团队开发的约定俗成。

git rebase应用

先准备好一个主基线:

在这里插入图片描述

在此基础上创建一个分支:名字为fenzhi_1,创建另一个分支,名字为fenzhi_2

在这里插入图片描述

在这里插入图片描述

最开始fenzhi_1和fenzhi_2以及master的基线是同一个。

同一分支的rebase操作

当前分支为fenzhi_2,共有三个提交记录:

在这里插入图片描述

在第一次修改上进行右击鼠标:选择图中的选项,翻译一下就是在此处进行交互式改变基址。
交互式可以理解为可自定义的选择不同rebase行为进行操作。

在这里插入图片描述

然后就会出现这个页面,点击squash进行合并即可。

在这里插入图片描述

在这里插入图片描述

执行结果看一下:

在这里插入图片描述

如果自己分支的几个提交都是本地的,还没有提交到远程分支fenzhi_2上,那么就可以直接push推到远程,但一般我们总要合自己代码到dev/test,所以必然是已经提交到自己远程分支上了, 此时当你去push你的commit时,会再次与你远程分支的commit合并,之前本地rebase的那些commit又会出现了。

若选择force push呢,翻译过来就是强制推送,看一下操作结果:有个提示,翻译一下就是:强制推送,可能会覆盖远程服务器的提交。

在push中选择 force push。

若这个远程分支只有你一个人在开发:强制推送是可以的,没有人会在你rebase没完成时提代码,可以直接理解为用你本地分支的状态区覆盖掉远端origin分支的状态,也就是执行过后,本地的分支什么样,远端分支就什么样

分支跟master之间的rebase操作

Rebase的本意是改变基线,意思就是当从master拉取的分支1开发一段时间后,master也提交了几个版本,这就使得分支1的基线与现在的master不是同一个版本。需要将分支1的基线改成最新master。那就需要rebase操作了。看案例效果:

看一下fenzhi_2的基线是在提交id为1639f5db的基础上拉的分支,然后做了俩次变更

在这里插入图片描述

再看一下master的提交记录:master在 1639f5db上提交了一次变更。

在这里插入图片描述

这就造成了fenzhi_2的基线不是最新的master了,现在要将fenzhi_2的基线改为提交id为f7ec72e7,看下面操作
本地分支改为fenzhi_2:

在这里插入图片描述

在master上右击鼠标:第二步操作翻译一下就是在master基础上改变fenzhi_2的基线。

在这里插入图片描述

点击操作:若看到有冲突,手动处理一下即可,

在这里插入图片描述

可以看到同一个位置都有改动,这就根据实际情况合并代码了,这里我的目的是master的改动和本分支的改动都要保留。

在这里插入图片描述

解决完后,会自动弹出一个窗口:是提交信息的修改,这个也是根据实际情况定,这里我不改,点击继续rebase。

在这里插入图片描述

看结果:提交id为f7ec72e7的成为了fenzhi_2的基线。

在这里插入图片描述

接下来push:可以看到push有俩个操作,一个push一个是force push(强制推送)。

在这里插入图片描述

若分支是自己使用,那我们就强制推送。本地的分支提交记录覆盖远程的。

上面的操作是分支改变基线,那反过来操作呢,在master上rebase呢。

看一下分支fenzhi_3:这个分支做了俩次变更

在这里插入图片描述

Master也做了俩次变更

在这里插入图片描述

在master上进行rebase onto fenzhi_3:

在这里插入图片描述

可以看到有个提示:

在这里插入图片描述

大概意思就是会对master的提交记录进行修改,看下执行结果:

在这里插入图片描述

发现分支的提交记录在master记录之前,这个与merge操作是相反的。继续操作push

在这里插入图片描述

可以看到上面提示,若点击合并呢:可以看到分支的提交跟master在一条线上,但最上面又有一条合并记录。

在这里插入图片描述

若点击的是rebase呢:可以看到是将分支fenzhi_3的提交放在了最前面。这个操作就模拟了代码merge,但提交记录是一条线。这个才是我们的本意。

在这里插入图片描述

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

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

相关文章

一图解释:监听dom滚动条是否滚动到底部

scrollTop:一个元素的内容垂直滚动的高度;scrollHeight :一个元素在不使用滚动条的情况下为了适应视口中所用内容所需的最小高度,包含内边距(padding),不包含外边距(margin&#xff…

NIST 电子病历中的临床决策部分的认证

写在正文之前 关于临床决策,有专门的行业协会收集并发布,我曾经注册过美国的一个网站,然后定期就会收到邮件通知新增了多少条临床决策。我记得我注册的是 NQF: Home (qualityforum.org) NQF: Home 美国国家标准与技术研究院(Nat…

【SpringCloud-Seata源码分析2】

文章目录 分支事务注册-客户端分支事务服务端的执行 分支事务注册-客户端 第一篇我们将全局事务启动,以及开启源码分析完成了,现在我们需要看一下分支事务注册。 我们分支事务的开始需要从PreparedStatementProxy#executeUpdate中去看。 public class…

MatLab手把手搭建FOC控制环路(全部使用matlab自带模块)

MatLab手把手搭建FOC控制环路(全部使用matlab自带模块) Matlab添加模块只需要在空白处双击鼠标左键,输入模块的名字。 添加PMSM模块: Permanent Magnet Synchronous Machine 参数选择: 添加逆变器Two-Level Conver…

CentOS 7 安装部署Cassandra4.1.5

一、Cassandra的介绍 Cassandra是一套开源分布式NoSQL数据库系统。它最初由Facebook开发,用于储存收件箱等简单格式数据,集GoogleBigTable的数据模型与Amazon Dynamo的完全分布式的架构于一身Facebook于2008将 Cassandra 开源,此后&#xff0…

Jmeter5.X性能测试【完整版】

目录 一、Http基础协议和解析 1、浏览器的B/S架构和C/S架构 (1)CS架构 (2)BS架构 (3)URL理解 2、Http超文本传输协议 (1)含义 # 协议 # json协议 # xml协议 (…

unity中使用commandbuffer将自定义画面渲染到主相机上

CommandBuffer 保存渲染命令列表(例如设置渲染目标或绘制给定网格)。您可以指示 Unity 在内置渲染管线中的各个点安排和执行这些命令,因此,您可以自定义和扩展 Unity 的渲染功能。 这句话意味着你可以通过command buffer让相机渲…

视频汇聚安防综合管理平台EasyCVR支持GA/T 1400视图库标准及设备接入配置

一、概述 视频汇聚安防综合管理平台EasyCVR视频监控系统已经与公安部GA/T 1400视图库标准协议实现了对接,即《公安视频图像信息应用系统》。 安防监控系统EasyCVR支持采用GA/T 1400进行对接,可实现人脸数据使用的标准化、合规化。其采用统一接口对接雪…

替换或重写Tomcat内置的404页面

替换或重写Tomcat内置的404页面 准备一个Tomcat隐藏Tomcat的相关信息纯净版的Tomcat解决Tomcat启动乱码的问题 替换或重写Tomcat内置的404页面创建新的首页和错误页面页面代码如下所示:创建首页index.html创建error_404.html页面创建其他错误页面创建编写web.xml&am…

【C++】优先队列的使用及模拟实现

💗个人主页💗 ⭐个人专栏——C学习⭐ 💫点击关注🤩一起学习C语言💯💫 目录 导读 一、什么是优先队列 二、优先队列的使用 1. 优先队列的构造 2. 优先队列的基本操作 3. 使用示例 三、优先队列模拟实…

C++初学者指南第一步---12.引用

C初学者指南第一步—12.引用 文章目录 C初学者指南第一步---12.引用1. 功能(和限制)1.1 非常量引用1.2 常量引用1.3 auto引用 2.用法2.1 范围for循环中的引用2.2 常量引用的函数形参2.3 非常量引用的函数形参2.4 函数参数的选择:copy / const…

emqx5.6.1 数据、配置备份与迁移

EMQX 支持导入和导出的数据包括: EMQX 配置重写的内容: 认证与授权配置规则、连接器与 Sink/Source监听器、网关配置其他 EMQX 配置内置数据库 (Mnesia) 的数据 Dashboard 用户和 REST API 密钥客户端认证凭证(内置数据库密码认证、增强认证…

cas客户端流程详解(源码解析)--单点登录

博主之前一直使用了cas客户端进行用户的单点登录操作&#xff0c;决定进行源码分析来看cas的整个流程&#xff0c;以便以后出现了问题还不知道是什么原因导致的 cas主要的形式就是通过过滤器的形式来实现的&#xff0c;来&#xff0c;贴上示例配置&#xff1a; 1 <list…

海南聚广众达电子商务咨询有限公司抖音电商新引擎

在数字化浪潮席卷而来的今天&#xff0c;抖音电商作为新兴的商业模式&#xff0c;正以其独特的魅力和无限的潜力&#xff0c;引领着电子商务行业的革新与发展。海南聚广众达电子商务咨询有限公司&#xff0c;作为专注于抖音电商服务的领军企业&#xff0c;凭借其专业的团队、丰…

双例集合(三)——双例集合的实现类之TreeMap容器类

Map接口有两个实现类&#xff0c;一个是HashMap容器类&#xff0c;另一个是TreeMap容器类。TreeMap容器类的使用在API上于HashMap容器类没有太大的区别。它们的区别主要体现在两个方面&#xff0c;一个是底层实现方式上&#xff0c;HashMap是基于Hash算法来实现的吗&#xff0c…

【C语言】函数指针数组和指向函数指针数组的指针

1 函数指针数组 数组是一个存放相同类型数据的存储空间&#xff0c;那我们已经学习了指针数组。 比如&#xff1a; int *arr[10];//数组的每个元素是int* 那要把函数的地址存到一个数组中&#xff0c;那这个数组就叫函数指针数组&#xff0c;那函数指针的数组如何定义呢&am…

OS复习笔记ch11-2

上一节我们学习的内容是I/O系统的特点和设备分类和差异&#xff0c;这一节我们将主要关注I/O控制方式、OS设计问题、I/O逻辑结构等。 I/O功能的演变 在专栏的ch1-2中&#xff0c;我们详细讲解了CPU与外设的三种交互方式&#xff0c;这里简单地带过。 &#xff08;1&#xff0…

C++之STL(一)

1、泛型程序设计 目的&#xff1a;提供相同的算法&#xff0c;相同的逻辑&#xff0c;来对不同类型的数据结构进行操作。 所以需要将类型当作参数&#xff0c;也就是参数类型化。 2、什么是STL STL是基于模板实现的。编译的时候进行实例化 3、STL组件 4、容器算法迭代器关系 …

第二次IAG

IAG in NanJing City 我与南京奥体的初次相遇&#xff0c;也可能是最后一次&#xff01; 对我来说,IAG 演唱会圆满结束啦! 做了两场充满爱[em]e400624[/em]的美梦 3.30号合肥站&#xff0c;6.21号南京站[em]e400947[/em] 其实&#xff0c;没想到昨天回去看呀!(lack of money […

如何修改外接移动硬盘的区号

- 问题介绍 当电脑自身内存不够使用的时候&#xff0c;使用外接硬盘扩展内存是一个不错的选择。但是当使用的外接硬盘数量过多的时候&#xff0c;会出现分配硬盘的区号变动的情况&#xff0c;这种情况下会极大的影响使用的体验情况。可以通过以下步骤手动调整恢复 - 配置 版本…