git常用操作汇总大全

  • 👏作者简介:大家好,我是爱吃芝士的土豆倪,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.mzph.cn/web/32209.shtml

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

相关文章

ThinkPHP6图书借阅管理系统

有需要请加文章底部Q哦 可远程调试 ThinkPHP6图书借阅管理系统 一 介绍 此图书借阅管理系统基于ThinkPHP6框架开发,数据库mysql,前端bootstrap。系统角色分为用户和管理员。 技术栈 ThinkPHP6mysqlbootstrapphpstudyvscode 二 功能 用户 1 登录/注销…

多路h265监控录放开发-(8)完成摄像机管理的修改和删除功能

xviewer.h public:XViewer(QWidget* parent Q_NULLPTR);//编辑摄像机void SetCam(int index);//121 public slots:void AddCam(); //新增摄像机配置120void SetCam(); //121void DelCam(); //121 private:Ui::XViewerClass ui;QMenu left_menu_; xviewer.cpp void XView…

LeetCode 算法:排序链表 c++

原题链接🔗:排序链表 难度:中等⭐️⭐️ 题目 给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。 示例 1: 输入:head [4,2,1,3] 输出:[1,2,3,4] 示例 2: 输…

牛客练习题打卡--redis

A list保证数据线性有序且元素可重复,它支持lpush、blpush、rpop、brpop等操作,可以当作简单的消息队列使用,一个list最多可以存储2^32-1个元素; redis中set是无序且不重复的; zset可以按照分数进行排序 ,是有序不重复的; Redi…

Arduino入门4——基于millis函数、定时器中断的多任务框架

Arduino入门4——基于millis函数、定时器中断的多任务框架 millis函数定时器中断总结(笔者的碎碎念。。。。。。。。) 上一期我们基于oled学习了库的调用,这一期我们基于millis函数和定时器中断,学习以下多任务框架。但是我们本期…

CentOS9镜像下载地址加速下载

CentOS 9 是 CentOS 项目的最新版本之一,它基于 RHEL(Red Hat Enterprise Linux)9 的源代码构建。CentOS(Community ENTerprise Operating System)是一个免费的企业级 Linux 发行版,旨在提供一个与 RHEL 兼…

大模型项目落地时,该如何估算模型所需GPU算力资源

近期公司有大模型项目落地。在前期沟通时,对于算力估算和采购方案许多小伙伴不太了解,在此对相关的算力估算和选择进行一些总结。 不喜欢过程的可以直接 跳到HF上提供的模型计算器 要估算大模型的所需的显卡算力,首先要了解大模型的参数基础知识。 大模型的规模、参数的理解…

路由器基础配置以及静态路由配置

1、搭建网络 搭建网络拓扑、分配IP地址、划分网段、连接端口 2、配置路由器 路由器基础配置 //进入全局配置模式 Router#enable Router#conf t Enter configuration commands, one per line. End with CNTL/Z.//配置高速同步串口serial2/0 Router(config)#int ser2/0 Route…

21.智能指针(上)

目录 一、概念二、Box\<T\>2.1 概念与应用场景2.2 简单应用2.3 递归类型的创建 三、通过Deref trait将智能指针当作常规引用处理3.1 常规引用3.2 像引用一样使用Box\<T\>3.3 自定义智能指针3.4 函数和方法的隐式解引用强制转换3.5 解引用强制转换与可变性交互 四、…

docker简单快速使用上手

1.Docker是什么&#xff1f; Docker 是一个开源的容器化平台&#xff0c;主要用于开发、运输和运行应用程序。它通过提供轻量级的虚拟化机制&#xff0c;使得开发者可以在一个隔离的环境中运行和管理应用程序及其依赖项。Docker 的核心组件包括镜像&#xff08;Image&#xff…

Python | Leetcode Python题解之第165题比较版本号

题目&#xff1a; 题解&#xff1a; class Solution:def compareVersion(self, version1: str, version2: str) -> int:n, m len(version1), len(version2)i, j 0, 0while i < n or j < m:x 0while i < n and version1[i] ! .:x x * 10 ord(version1[i]) - o…

18.cobra框架了解

目录 概述举例安装实践实践 概述 github cobra cobra 快速的实现一个命令行客户端&#xff0c;命令行解析工具。 cobra 中的主要概念 -Commands 表示执行运作-Args 执行参数-Flags 这些运作的标识符 举例 git clone 命令 git clone https://github.com/spf13/cobra.git -…

【Java】已解决java.nio.channels.OverlappingFileLockException异常

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决java.nio.channels.OverlappingFileLockException异常 在Java的NIO&#xff08;New I/O&#xff09;编程中&#xff0c;java.nio.channels.OverlappingFileLockException是一…

ArrayList知识点(面试)

上一篇我们说了hashmap的相关知识点&#xff0c;这一篇我们再说一些ArrayList的相关知识&#xff0c;因为ArrayList也是我们项目中比较常用的。 ArrayList(底层是数组) 底层工作原理 首先&#xff0c;在构造ArrayList的时候会先看有没有指定容量&#xff0c;如果没有&#xf…

人人讲视频如何下载

一、工具准备 1.VLC media player 2.谷歌浏览器 二、视频下载 1.打开人人讲网页&#xff0c;需要下载的视频 谷歌浏览器打开调试窗口 搜索m3u8链接 拷贝到VLCplayer打开网络串流方式打开测试是否能正常播放 2.下载视频 能正常播放后&#xff0c;切换播放为转换选择mp4格式…

24年火爆全网的企业信贷产品-民生惠详解

今年&#xff0c;民生惠企业信贷产品非常火爆&#xff01;客户想申请这信用贷款前&#xff0c;先确认下自己是不是在白名单里。有些地区还能加进白名单&#xff0c;不在的话就别申请了&#xff0c;这是专门给受邀的小微企业的。 这款产品的细节是这样的&#xff1a; 额度&am…

visual studio 创建c++项目

目录 环境准备&#xff1a;安装 visual studiovisual studio 创建c项目Tips&#xff1a;新建cpp文件注释与取消注释代码 其他初学者使用Visual Studio开发C和C时常遇到的3个坑 环境准备&#xff1a;安装 visual studio 官网&#xff1a;https://visualstudio.microsoft.com/zh…

【十三】图解mybatis缓存模块之装饰器模式

图解mybatis缓存模块之装饰器模式 简介 之前有写过一篇博客介绍过mybatis的缓存模块设计【九】mybatis 缓存模块设计-CSDN博客 &#xff0c;当时着重讲解的是mybatis种一级缓存和二级缓存&#xff0c;本次博客补充讲解一下装饰器模式的应用&#xff0c;本篇主要分两部分讲解&a…

kotlin智能类型转换

1、在kotlin这中&#xff0c;定义如下类型&#xff0c;在判断不为null的语句里边&#xff0c;会发生类型转换&#xff1a; fun main(){var a:String? "XXX" // a 类型为 String? 可能为 null// 在if 语句中&#xff0c;a 的类型为 Stringif(a ! null){println(a.l…

动态ARP

定义 动态ARP表项由ARP协议通过ARP报文自动生成和维护&#xff0c;可以被老化&#xff0c;可以被新的ARP报文更新&#xff0c;可以被静态ARP表项覆盖。 动态ARP适用于拓扑结构复杂、通信实时性要求高的网络。 ARP地址解析过程 动态ARP通过广播ARP请求和单播ARP应答这两个过…