Git工具使用全解

news2024/12/24 2:27:14

Git工具使用全解

文章目录

  • Git工具使用全解
    • 1.企业开发中的版本控制器
    • 2.Git工具的使用场景
    • 3.Git工具操作流程(三板斧操作)
    • 4.Git工具的安装与常用命令
      • 4.1 Git的安装
      • 4.2 Git基本操作指令
    • 5.Git工具常见问题解决
      • 5.1 常见问题:分支冲突解决办法
      • 5.2 常见问题:合并冲突解决办法
    • 扩展:开发中分支使用原则与流程

请添加图片描述


1.企业开发中的版本控制器

  1. 在企业开发过程中,由于开发一个项目需要对其进行多次的修改和调试,所以需要控制项目开发过程中的版本
  2. 版本控制器一般使用两种集中式版本控制工具分布式版本控制工具
    • 集中式版本控制工具(比如:SVN、CVS)版本库是集中存放在中央服务器的,team中的每个人工作时,必须联网,从中央服务器下载代码,经过个人修改后提交到中央服务器上
    • 分布式版本控制工具(比如:Git)没有中央服务器,每个人的电脑就是一个完整的版本库,这样工作的时候,不需要联网,因为版本库就在自己的电脑上。多人协同时只需要把各自的修改推送给对方,就能看到对方的修改了。这样大大提高了开发效率

关于两种版本控制工具我们可以用下图来直观的理解:

请添加图片描述


2.Git工具的使用场景

场景一:备份

小故事:

  • 小明负责的模块就要完成了,就在即将Release之前的一瞬间,电脑突然蓝屏,硬盘光荣牺牲!几个月来的努力付之东流…

场景二:代码还原

小故事:

  • 这个项目中需要一个很复杂的功能,老王摸索了一个星期终于有眉目了,可是这被改得面目全非的代码已经回不到从前了。什么地方能买到哆啦A梦的时光机啊?

场景三:协同开发

小故事:

  • 小刚和小强先后从文件服务器上下载了同一个文件:test.cpp。小刚在 test.cpp 文件中的第30行声明了一个方法,叫count(),先保存到了文件服务器上;小强在 test.cpp 文件中的 第50行声明了一个方法,叫sum(),也随后保存到了文件服务器上,于是,count()方法就只存在于小刚的记忆中了

场景四:追溯问题代码的编写人和编写时间

小故事:

  • 老王是另一位项目经理,每次因为项目进度挨骂之后,他都不知道该扣哪个程序员的工资!就拿这次来说吧,有个Bug调试了30多个小时才知道是因为相关属性没有在应用初始化时赋值!可是手下的程序员都不承认是自己干的!

3.Git工具操作流程(三板斧操作)

请添加图片描述

  1. clone(克隆): 从远程仓库中克隆代码到本地仓库
  2. checkout (检出):从本地仓库中检出一个仓库分支然后进行修订
  3. add(添加): 在提交前先将代码提交到暂存区
  4. commit(提交): 提交到本地仓库。本地仓库中保存修改的各个历史版本
  5. fetch (抓取) : 从远程库,抓取到本地仓库,不进行任何的合并动作,一般操作比较少
  6. pull (拉取) : 从远程库拉到本地库,自动进行合并(merge),然后放到到工作区,相当于 fetch+merge
  7. push(推送) : 修改完成后,需要和团队成员共享代码时,将代码推送到远程仓库

上面这么多命令,看起来复杂,其实我们实际使用就三步,我们称为三板斧:

首先我们需要先在Centos7上下载Git工具,然后进行基本的配置:

yum install -y git //安装Git工具
git config --global user.email "你的邮箱" //这个是看提交日志的时候显示的邮箱
git config --global user.name "你的名字" //这个是看提交日志的时候显示的名字
git clone [你的gitee/github仓库地址] //在你创建的远端仓库里点下载就可以复制看到

请添加图片描述

  1. 第一斧:git add,将需要用git管理的文件告知git工具

    git add[文件名]
    
  2. 第二斧:git commit,提交改动到本地仓库.git

    git commit -m "提交日志"  
    //提交的时候应该注明提交日志,描述改动的详细内容,否则未来必被leader和其他同时喷,别问我为什么知道!
    

    注:这里我们看到云端仓库被我们下载了下来。我们创建编辑一个文件,试一下三板斧:

请添加图片描述

请添加图片描述

这里我们看到git commit错误了,什么原因呢?

这是我们经常遇到的错误(报错解释:无法推送某些内容):错误原因就是上传的文件冲突或者版本不一样,大概就是你改了本地没有同步

解决方法:重新拉去一下仓库

git pull --rebase origin master //拉取最新的代码
git pull origin master //这个命令不推荐,会产生不自动合并本地分支产生冲突的情况

重新来一次git add 和 git commit,然后就可以了:

请添加图片描述

  1. 第三斧:git push,推送本地仓库.git给远程仓库

    git push 
    //这里会弹出一个命令让你输入用户名和密码
    //这里的用户名和密码是你登录gitee或github时的账号和密码
    

请添加图片描述

最后我们去远程云端仓库就可以看到我们刚才传的文件了:

请添加图片描述


4.Git工具的安装与常用命令

4.1 Git的安装

下载地址: https://git-scm.com/download

请添加图片描述

请添加图片描述

注:

  1. Git GUI:Git提供的图形界面工具
  2. Git Bash:Git提供的命令行工具
  3. 当安装Git后首先要做的事情是设置用户名称和email地址。这是非常重要的,因为每次Git提交都会使用该用户信息
git config --global user.name "你的名字"
git config --global user.email "你的邮箱"

4.2 Git基本操作指令

请添加图片描述

日常使用指令:

  • 查看修改的状态git status作用:查看修改的状态(暂存区、工作区)
  • 添加工作区到暂存区git add 文件名作用:添加工作区一个或多个文件的修改到暂存区
  • 提交暂存区到本地仓库git commit -m “注释内容”作用:提交暂存区内容到本地仓库的当前分支
  • 查看提交日志git log作用:查看提交日志
  • 版本回退git reset --hard commitID作用:版本切换,恢复内容
    • commitID 可以使用 git-log 或 git log 指令查看
    • git reflog 这个指令可以看到已经删除的提交记录

协同开发指令:

几乎所有的版本控制系统都以某种形式支持分支。 使用分支意味着你可以把你的工作从开发主线上分离开来进行重大的Bug修改、开发新的功能,以免影响开发主线

  • 查看本地分支git branch
  • 创建本地分支git branch 分支名
  • 切换分支git checkout 分支名
  • 创建并切换分支git checkout -b 分支名
  • 合并分支git merge 分支名
  • 删除分支 git branch -d b1 //删除分支时,需要做各种检查
  • 删除分支git branch -D b1 //不做任何检查,强制删除

远程仓库操作指令:

  • 添加远程仓库: git remote add <远端名称> <仓库路径>
    • 远端名称,默认是origin,取决于远端服务器设置
    • 仓库路径,从远端服务器获取此URL
      -例如: git remote add origin git@gitee.com:czbk_zhang_meng/git_test.git
  • 查看远程仓库:git remote
  • 推送到远程仓库:git push [-f] [–set-upstream] [远端名称 [本地分支名][:远端分支名] ]
    • 如果远程分支名和本地分支名称相同,则可以只写本地分支:git push origin master
    • -f 表示强制覆盖
    • –set-upstream 推送到远端的同时并且建立起和远端分支的关联关系
    • 如果当前分支已经和远端分支关联,则可以省略分支名和远端名,直接用git push
  • 查看关联关系: git branch -vv 命令
  • 从远程仓库克隆:git clone <仓库路径> [本地目录]
    • 本地目录可以省略,会自动生成一个目录
  • 从远程仓库中抓取和拉取:
    • 抓取:git fetch [remote name] [branch name]
    • 抓取指令就是将仓库里的更新都抓取到本地,不会进行合并
    • 如果不指定远端名称和分支名,则抓取所有分支
    • 拉取:git pull [remote name] [branch name]
    • 拉取指令就是将远端仓库的修改拉到本地并自动进行合并,等同于fetch+merge
    • 如果不指定远端名称和分支名,则抓取所有并更新当前分支

5.Git工具常见问题解决

5.1 常见问题:分支冲突解决办法

当两个分支上对文件的修改可能会存在冲突,例如同时修改了同一个文件的同一行,这时就需要手动解决冲突

解决冲突步骤如下:

  1. 处理文件中冲突的地方
  2. 将解决完冲突的文件加入暂存区(add)
  3. 提交到仓库(commit)

分支冲突部分的内容处理如下所示:

请添加图片描述


5.2 常见问题:合并冲突解决办法

这里说的合并冲突,其实上面我已经提到过了,这个也是经常遇到的问题,通常在git push的时候遇到

在一段时间,A、B用户修改了同一个文件,且修改了同一行位置的代码,此时会发生合并冲突

当我们在本地对同一个文件进行修改的时候,有可能你推送代码的时候失败,然后你又推送又失败,那么你大概率就G了,给你报下图的错,然后下面写一堆文件冲突

请添加图片描述

原因分析:

  1. 比如:A用户在本地修改代码后优先推送到远程仓库,此时B用户在本地修订代码,提交到本地仓库后,也需要推送到远程仓库,此时B用户晚于A用户,在B用户拉取代码时,远程仓库已经改变了,因为A、B用户同一段时间修改了同一个文件的相同位置代码,故会发生合并冲突
  2. 故需要先拉取远程仓库的提交经过合并,即更新仓库后才能推送到远端分支,如下图所示:

请添加图片描述

解决方法:重新拉取仓库,进行仓库更新,然后重新推送

git pull //拉取最新的代码
//然后重新进行三板斧操作就可以了,如果还报错,那就只能搜一下了,Linux下的错误解决 很多时候并不相通,但这种是最稳的
git add 文件名
git commit -m "注释信息"
git push

这里值得一提的一个良好的开发习惯:先git log看下别人的提交日志,然后再git pull拉取一下最新仓库,再开始自己的开发


扩展:开发中分支使用原则与流程

几乎所有的版本控制系统都以某种形式支持分支。 使用分支意味着你可以把你的工作从开发主线上分离开来进行重大的Bug修改、开发新的功能,以免影响开发主线

在开发中,一般有如下分支使用原则与流程:

  1. master (生产)分支线上分支,主分支,中小规模项目作为线上运行的应用对应的分支
  2. develop(开发)分支是从master创建的分支,一般作为开发部门的主要开发分支,如果没有其他并行开发不同期上线 要求,都可以在此版本进行开发,阶段开发完成后,需要是合并到master分支,准备上线
  3. feature/xxxx分支从develop创建的分支,一般是同期并行开发,但不同期上线时创建的分支,分支上的研发任务完 成后合并到develop分支
  4. hotfix/xxxx分支从master派生的分支,一般作为线上bug修复使用,修复完成后需要合并到master、test、 develop分支
  5. 还有一些其他分支,在此不再详述,例如test分支(用于代码测试)、pre分支(预上线分支)等等

请添加图片描述

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

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

相关文章

Linux | 动静态库 | 动静态链接 | makefile库打包 | 第三方库使用

文章目录何为动静态库库文件的链接静态链接静态库打包动态链接动态库打包第三方库的使用静态库的使用动态库的使用在系统层面上的动态链接理解何为动静态库 静态库(.a)&#xff1a;在程序编译链接时将静态库二进制码拷贝到程序代码中&#xff0c;程序运行时不再需要外部的静态库…

面试:类相关---Java、Android有哪些类加载器

Android类加载器与Java类加载器的对比 - 掘金 Android | 类加载器与插件化 - 简书 相关复习&#xff1a; 面试&#xff1a;热修复原理_沙漠一只雕得儿得儿的博客-CSDN博客_android 热修复原理面试 面试&#xff1a;类的初始化过程_沙漠一只雕得儿得儿的博客-CSDN博客 什么…

内置 230+ 工具,它值得被官方纳入标准库

经过了几十年的发展&#xff0c;Python 的轮子生态越来越丰富&#xff0c;例如针对网络请求有 requests&#xff0c;针对命令行开发有 typer 等等&#xff0c;这些第三方库给我们的日常开发带来了极大的便利。 今天我推荐另一个第三方库 – Boltons&#xff0c;和大多数第三方…

go语言之不必要的拷贝

其实我也是个golang开发者~~ Go语言本来就以轻量快速著称&#xff0c;一位GitHub员工却偶然发现&#xff1a; 只改变一个字符的位置&#xff0c;能把一段代码运行速度提高足足42%。 简直就像是…… 这个简单有效的技巧一经发布&#xff0c;就引来众多程序员围观。 原作者自己…

论文中常见的拟合散点验证图(R语言版)

论文中常见的拟合散点验证图&#xff08;R语言版&#xff09; 如上图所示&#xff0c;是论文中常见的validation图&#xff0c;python也能实现相似的图绘。 今天先介绍R语言版&#xff0c;python改期再介绍吧 这张图需要依次实现下列功能&#xff1a; data实测与data模拟的散…

RabbitMQ系列【11】延迟队列

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 文章目录前言1. 过期消息实现延迟队列2. 过期队列实现延迟队列3. 插件实现延迟队列3.1 安装插件3.2 代码实现3.3 测试前言 延迟队列&#xff1a;即消息进入队列后不会立即被消费&#xff0c;只有到达指…

MySQL事务隔离机制 -- 必须说透

文章目录前言一、什么是数据库事务二、事务并发带来的4类问题三、事务4种隔离级别四、Mysql演示4种隔离级别总结前言 如何控制并发是数据库领域中非常重要的问题之一&#xff0c;MySQL为了解决并发带来的问题&#xff0c;设计了事务隔离机制、锁机制、MVCC机制&#xff0c;用一…

c# 实验七 图像列表框及树形视图控件的使用

前言&#xff1a; &#x1f44f;作者简介&#xff1a;我是笑霸final&#xff0c;一名热爱技术的在校学生。 &#x1f4dd;个人主页&#xff1a;个人主页1 || 笑霸final的主页2 &#x1f4d5;系列专栏&#xff1a;《项目专栏》 &#x1f4e7;如果文章知识点有错误的地方&#xf…

[附源码]java毕业设计四六级考试管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

m基于matlab的wcdma软切换算法的研究分析和仿真

目录 1.算法概述 2.仿真效果预览 3.MATLAB部分代码预览 4.完整MATLAB程序 1.算法概述 软切换是WCDMA系统的关键技术之一&#xff0c;软切换算法和相关参数的设置直接影响着系统的容量和服务质量。通过WCDMA系统的软切换技术可以提高小区覆盖率和系统容量。所以软切换技术是…

【ASM】字节码操作 工具类与常用类 LocalVariablesSorter 类 简单介绍与使用

文章目录 1.概述2. LocalVariablesSorter#2.1 class info2.2 fields3.案例3.1 编码实现3.2 编码实现v21.概述 在上一节:【ASM】字节码操作 工具类与常用类 GeneratorAdapter 介绍 我们知道了对于GeneratorAdapter 类来说,它非常重要的一个特点:将一些visitXxx()方法封装成一…

Java面向对象详解(上)

Java面向对象详解&#xff08;上&#xff09;&#x1fa85;面向对象与面向过程的区分✨面向过程&#xff1a;✨面向对象&#xff1a;&#x1fa85;类是什么&#xff1f;&#x1fa85;对象是什么&#xff1f;&#x1fa85;类的结构&#x1fa85;类中方法&#xff1a;✨成员方法与…

实战讲解SpringBoot启动时自动加载数据库数据到内存:通过回调方法自动运行Bean(图+文+源码)

1 缘起 在补充SpringCloud网关&#xff08;Gateway&#xff09;配置白名单相关知识过程中&#xff0c; 有两种实现方案&#xff1a; &#xff08;1&#xff09;SpringBoot的启动配置文件application.yml进行配置&#xff1b; &#xff08;2&#xff09;自动加载MySQL数据库中的…

【人工智能】Mindspore框架中保存加载模型

前言 MindSpore着重提升易用性并降低AI开发者的开发门槛&#xff0c;MindSpore原生适应每个场景包括端、边缘和云&#xff0c;并能够在按需协同的基础上&#xff0c;通过实现AI算法即代码&#xff0c;使开发态变得更加友好&#xff0c;显著减少模型开发时间&#xff0c;降低模…

深度学习在图像处理中的应用学习笔记

这篇学习笔记用于记录本人在读研期间的学习内容 在刚入学不久&#xff0c;发现一个B站up主对这方面进行了一系列的整理总结&#xff0c;并上传了代码&#xff0c;并且非常成体系&#xff0c;因此本人打算跟着这位up主的步骤&#xff0c;对这方面进行学习并且做一个记录&#xf…

Vue安装并使用axios发送请求

前言 本文主要介绍的是使用在Vue项目中安装并使用axios发送请求 axios介绍 axios是一种Web数据交互方式 它是一个基于promise的网络请求库&#xff0c;作用于node.js和浏览器中&#xff0c;它是 isomorphic 的(即同一套代码可以运行在浏览器和node.js中) 本质是对原生XHRX…

NAND Flash原理

Flash 简介 Flash全名叫做Flash Memory&#xff0c;属于非易失性存储设备(Non-volatile Memory Device)&#xff0c;与此相对应的是易失性存储设备(Volatile Memory Device)。关于什么是非易失性/易失性&#xff0c;从名字中就可以看出&#xff0c;非易失性就是不容易丢失&…

BGP→→

BGP-4 提供了一套新的机制以支持无类域间路由。这些机制包括支持网络前缀的通告、取消 BGP 网络中 “ 类 ” 的概念。 BGP-4 也引入机制支持路由聚合&#xff0c;包括 AS 路径的集合。 特点 BGP属于外部或域间路由协议。BGP的主要目标是为处于不同AS中的路由器之间进行路由信…

Spring Cloud Config 配置中心

最简单的配置中心&#xff0c;就是启动一个服务作为服务方&#xff0c;之后各个需要获取配置的服务作为客户端来这个服务方获取配置。 Spring Cloud Config&#xff0c;可以用 git &#xff0c;还可以用数据库、svn、本地文件等作为存储。 1. Config Server 引入 config-ser…

Day08--自定义组件的properties属性

提纲挈领&#xff1a; 1.properties属性 我的操作&#xff1a; 1》 2》 3》输出看看效果是不是真的有接收到。 ********************************* ********************************* ********************************* ********************************* **************…