git的简单介绍和使用

git学习

      • 1. 概念
        • git和svn的区别和优势
        • 1.1 区别
        • 1.2 git优势
      • 2. git的三个状态和三个阶段
        • 2.1 三个状态:
        • 2.2 三个阶段:
      • 3. 常用的git命令
        • 3.1 下面是最常用的命令
        • 3.2 git命令操作流程图如下:
      • 4. 分支内容学习
        • 4.1 项目远程仓库
        • 4.2 项目本地仓库
        • 4.3 生产环境从远程master分支拉取打包,暂不设置“integration manager”角色,每位开发人员均可以向master分支合并。
      • 5. 具体开发步骤
      • 6. 如何解决冲突
      • 7. 减少冲突的方法
      • 8. 关于对冲突和合并的理解
      • 9. 补充其他可能用的命令
        • 9.1 对象库操作相关命令
        • 9.2 数据传输相关命令
        • 9.3 分支相关命令
          • 9.3.1 git branch 分支管理
          • 9.3.2 git checkout 切换或新建分支
          • 9.3.3 git merge 分支合并

1. 概念

Git是一个免费和开源的分布式版本控制系统。相较于SVN具有便于本地分支等特性。

git和svn的区别和优势

1.1 区别

  • SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活,干完后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,如果在局域网还可以,带宽够大,速度够快,如果在互联网下,如果网速慢的话,就纳闷了。

  • Git是分布式版本控制系统,那么它就没有中央服务器的,每个人的电脑就是一个完整的版本库,这样,工作的时候就不需要联网了,因为版本都是在自己的电脑上。既然每个人的电脑都有一个完整的版本库,那多个人如何协作呢?比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。

1.2 git优势

  1. 容易分支;git鼓励创建一个或多个本地分支进行开发且代价极小。与此对应SVN的分支基本上等于将整个项目进行拷贝,成本大。
  2. 速度快;大部分操作都在本地进行,如查看提交记录。但是在拉取的时候会慢,SVN拉取的是最新版本,而GIT会拉取整套版本;
  3. 分布式;与SVN集中式管理相比,GIT每个用户都是主服务的一个完整备份;
  4. 有暂存区;可用于提交部分文件;
  5. 数据安全;每个文件与每次提交都会被验证

2. git的三个状态和三个阶段

  • 三个状态:已修改,已暂存,已提交
  • 三个阶段:工作区,暂存区,仓库

三个状态分别对应三个阶段

2.1 三个状态:

  • 已修改(modified):表示修改了文件,但还没保存到仓库中。

  • 已暂存(staged):已暂存,表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。

  • 已提交(committed):表示数据已经安全地保存在本地仓库中。

2.2 三个阶段:

  • Workspace:工作区
  • Index / Stage:暂存区
  • Repository:仓库区(或本地仓库)
  • Remote:远程仓库
  • 工作区(Working Directory):对项目的某个版本独立提取出来的内容。 这些从 Git 仓库的压缩数据库中提取出来的文件,放在磁盘上供你使用或修改。

  • 暂存区(Staging Area):保存了下次将要提交的文件列表信息,一般在 Git 仓库目录中。 按照 Git 的术语叫做“索引”,不过一般说法还是叫“暂存区”。

  • 仓库(Repository): Git用来保存项目的元数据和对象数据库的地方,分为本地仓库与远程仓库。

3. 常用的git命令

3.1 下面是最常用的命令

序号命令名称描述
1git clone克隆复制远程仓库包含历史版本在内的几乎所有数据至本地仓库。
2 ❤git pull拉取将远程仓库的最新内容数据下载到你的本地仓库并尝试合并
3 ❤git fetch获取将远程仓库的最新内容数据下载到你的本地仓库但不会自动合并
4git checkout检出多用途命令,从Git仓库提取文件、撤销修改、切换分支等。
5git diff比较未暂存文件与最后一次提交的文件或者已暂存文件差异。
6 ❤git add跟踪跟踪新文件并使之处于暂存状态或合并时将冲突文件标识为已解决等。
7 ❤git commit提交将未暂存的或已暂存的文件保存至本地仓库
8 ❤git push推送将文件推送到远程仓库。
9git log查看提交历史。
10❤git branch分支创建或查看分支。
11❤git merge合并合并分支。

3.2 git命令操作流程图如下:

在这里插入图片描述

4. 分支内容学习

4.1 项目远程仓库

共分为两个分支。

  • master分支:主干分支。用于发布生产环境。

  • dev分支:开发分支。(一般我们都是从dev拉取版本)接收本地dev分支的合并。测试无误后才合并至master分支,后续根据情况决定是否建立测试分支。

4.2 项目本地仓库

  • 包括一个dev分支与多个功能及bug修复分支。

  • dev分支用来合并其它功能分支的提交,同时用来推送远程dev分支。

  • 功能分支及bug修复分支是临时分支,用于开发具体功能和修复bug,开发完成合并至本地dev分支后可删除;

    注意线上的bug修改分支需要从远程master分支进行拉取。

4.3 生产环境从远程master分支拉取打包,暂不设置“integration manager”角色,每位开发人员均可以向master分支合并。

5. 具体开发步骤

  1. 拉取远程最新提交的dev分支至本地dev分支,保证本地dev分支代码为最新版本。

  2. 从本地dev分支拉取新的功能分支dev-temp-xxx并在其上进行开发

    就是新建一个dev-temp-xxx分支

  3. 本地功能开发分支在开发完成并且自测无误后进行代码提交commit(commit是提交到本地仓库)。

    ps:只是提交到本地仓库,并不是合并merge;

    每个temp分支和dev都有指针指向自己的版本,在没有合并之前是不会产生新的版本的;

  4. 切换到本地dev分支从远程dev分支拉取最新提交。

    保证本地dev最新;因为在我们第一次拉取远程dev进行功能开发期间,可能其他人已经push了一个版本修改了相同的功能,这个时候我们就得重新拉取远程dev到本地dev,以便于解决 / 避免冲突

  5. 将功能分支dev-temp-xxx合并(merge)到本地dev分支,此过程可能产生冲突,解决冲突。

    再本地dev重新拉取以后,我们在把temp分支合并到本地

  6. 推送本地dev分支到远程dev分支。

  7. 将新建的功能分支dev-temp-xxx删除。

个人 具体理解如下:

6. 如何解决冲突

  1. 冲突发生时首先备份自己开发的内容。

  2. 然后用他人的版本解决冲突。

    舍弃自己的版本,直接用他人的版本作为merge的父类;

  3. 将自己新开发的内容回添到已解决冲突的文件中。

    不是简单的复制粘贴上去

  4. 提交。

7. 减少冲突的方法

  • 任务分解时功能独立;

  • 开发前拉取代码;(尽量早拉取)

  • 开发测试完成后及时提交代码。(尽快早提交)

8. 关于对冲突和合并的理解

  • 冲突的解决,分支的合并都是在本地的;
  • 本地的dev分支版本,都是高于拉取时远程dev的版本,所以在本地合并(merge)之前得重新拉去最新的远程dev分支

9. 补充其他可能用的命令

命令简要说明
git add添加至暂存区
git add–interactive交互式添加
git apply应用补丁
git am应用邮件格式补丁
git annotate同义词,等同于 git blame
git archive文件归档打包
git bisect二分查找
git blame文件逐行追溯
git branch 分支相关分支管理
git cat-file版本库对象研究工具
git checkout 分支相关检出到工作区、切换或创建分支
git cherry-pick提交拣选
git citool图形化提交,相当于 git gui 命令
git clean清除工作区未跟踪文件
git clone克隆版本库
git commit提交
git config查询和修改配置
git describe通过里程碑直观地显示提交ID
git diff差异比较
git difftool调用图形化差异比较工具
git fetch获取远程版本库的提交
git format-patch创建邮件格式的补丁文件。参见 git am 命令
git grep文件内容搜索定位工具
git gui基于Tcl/Tk的图形化工具,侧重提交等操作
git help帮助
git init版本库初始化
git init-db*同义词,等同于 git init
git log显示提交日志
git merge 分支相关分支合并
git mergetool图形化冲突解决
git mv重命名
git pull拉回远程版本库的提交
git push推送至远程版本库
git rebase分支变基
git rebase–interactive交互式分支变基
git reflog分支等引用变更记录管理
git remote远程版本库管理
git repo-config*同义词,等同于 git config
git reset重置改变分支“游标”指向
git rev-parse将各种引用表示法转换为哈希值等
git revert反转提交
git rm删除文件
git show显示各种类型的对象
git stage*同义词,等同于 git add
git stash保存和恢复进度
git status显示工作区文件状态
git tag里程碑管理

9.1 对象库操作相关命令

命令简要说明
git commit-tree从树对象创建提交
git hash-object从标准输入或文件计算哈希值或创建对象
git ls-files显示工作区和暂存区文件
git ls-tree显示树对象包含的文件
git mktag读取标准输入创建一个里程碑对象
git mktree读取标准输入创建一个树对象
git read-tree读取树对象到暂存区
git update-index工作区内容注册到暂存区及暂存区管理
git unpack-file创建临时文件包含指定 blob 的内容
git write-tree从暂存区创建一个树对象

9.2 数据传输相关命令

命令简要说明
git fetch-pack执行 git fetch 或 git pull 命令时在本地执行此命令,用于从其他版本库获取缺失的对象
git receive-pack执行 git push 命令时在远程执行的命令,用于接受推送的数据
git send-pack执行 git push 命令时在本地执行的命令,用于向其他版本库推送数据
git upload-archive执行 git archive –remote 命令基于远程版本库创建归档时,远程版本库执行此命令传送归档
git upload-pack执行 git fetch 或 git pull 命令时在远程执行此命令,将对象打包、上传

9.3 分支相关命令

9.3.1 git branch 分支管理

git branch 查看本地所有分支

git branch -a 查看所有的分支

git branch -r 查看远程所有分支

9.3.2 git checkout 切换或新建分支

git checkout --track origin/dev 切换到远程dev分支

git checkout dev 切换到本地dev分支

git checkout -b dev 建立一个新的本地分支dev

9.3.3 git merge 分支合并

git merge origin/dev 将分支dev与当前分支进行合并

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

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

相关文章

线上电影购票选座H5小程序源码开发

搭建一个线上电影购票选座H5小程序源码需要一些基本的技术和步骤。以下是一个大致的搭建过程,可以参考: 1. 确定需求和功能:首先要明确你想要的电影购票选座H5小程序的需求和功能,例如用户登录注册、电影列表展示、选座购票、订单…

编程中的宝藏:二分查找

二分查找 假设你需要在电话簿中找到一个以字母 “K” 开头的名字(虽然现在谁还在用电话簿呢!)。你可以从头开始翻页,直到进入以 “K” 打头的部分。然而,更明智的方法是从中间开始,因为你知道以 “K” 打头…

Unity游戏源码分享-仿开心消消乐Match3Jewel

Unity游戏源码分享-仿开心消消乐Match3Jewel 工程地址: https://download.csdn.net/download/Highning0007/88198762

Oracle DB 安全性 : TDE HSM TCPS Wallet Imperva

• 配置口令文件以使用区分大小写的口令 • 对表空间进行加密 • 配置对网络服务的细粒度访问 TCPS 安全口令支持 Oracle Database 11g中的口令: • 区分大小写 • 包含更多的字符 • 使用更安全的散列算法 • 在散列算法中使用salt 用户名仍是Oracle 标识…

嵌入式开发:高薪与广阔前景

嵌入式开发是高薪且前景广阔的领域。随着物联网和智能化的快速发展,嵌入式开发人才需求不断增加,市场供应相对不足,导致竞争激烈,推动了薪资水平的提升。 嵌入式开发的复杂性和技术要求使得企业为了吸引优秀人才,普遍…

Java一般用于postgis空间数据库通用的增删查改sql命令

目录 1 增加 2 删除 3 查询 4 更新 "public"."JGSQGW_Geo"为某模式下得表 一般postgrel有这样的设计模式 1 增加 #前端绘制出的数据插入 INSERT INTO "public"."JGSQGW_Geo" ( "geom","gridone","gridon…

Zookeeper特性与节点数据类型详解

CAP&Base理论 CAP理论 cap理论是指对于一个分布式计算系统来说,不可能满足以下三点: 一致性 : 在分布式环境中,一致性是指数据在多个副本之间是否能够保持一致的 特性,等同于所有节点访问同一份最新的数据副本。在一致性的需…

【积水成渊】uniapp高级玩法分享

大家好,我是csdn的博主:lqj_本人 这是我的个人博客主页: lqj_本人_python人工智能视觉(opencv)从入门到实战,前端,微信小程序-CSDN博客 最新的uniapp毕业设计专栏也放在下方了: https://blog.csdn.net/lbcy…

golang学习随记

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 go学习快捷键及快速生成代码片段go基础循环流程控制关键字切片,拷贝函数闭包 defer语句格式化输出go语言随机数rand.seed() 包管理并发编程goroutinecha…

Java经典面试题总结(一)

Java经典面试题总结(一) 题一:Java编译运行原理题二:JDK,JVM,JRE三者之间的关系题三:谈一下对冯诺依曼体系的了解题四:重载与重写的区别题五:拆箱装箱是指什么&#xff1…

《OWASP代码审计》学习——跨站脚本注入(XSS)

一、跨站脚本概述 1.什么是跨站脚本 跨站点脚本(XSS)是一种编码注入漏洞。它通常出现在 web 应用程序中。XSS 使攻击者能够向其他用户浏览的网页中注入恶意内容。XSS 允许攻击者绕过访问控制,它是 OWASP Top10 最常见的漏洞之一。XSS 是网络服务器上的第二大漏洞。…

C# OpenCvSharp 去水印 图像修复

效果 项目 VS2022.net4.8OpenCvSharp4 代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Security.Cryptography; using System.Text; usi…

【Windows10下启动RocketMQ报错:找不到或无法加载主类 Files\Java\jdk1.8.0_301\lib\dt.jar】解决方法

Windows10下启动RocketMQ报错:找不到或无法加载主类 一、问题产生二、产生原因三、解决办法 一、问题产生 参考RocketMQ Github官网上的说明,下载rocketmq-all-5.1.3-bin-release.zip,解压配置环境变量后,执行如下命令&#xff1a…

【C++11】列表初始化 | decltype操作符 | nullptr | STL的更新

文章目录 一.列表初始化1. 花括号初始化2. initializer_list 二.decltype三.nullptr四.STL的更新1.STL新增容器2.字符串转换函数3.容器中的一些新方法 一.列表初始化 1. 花括号初始化 { }的初始化 C98中,标准允许使用大括号{}对数组或者结构体元素进行统一的列表初…

搭建一个自己的文档网站

目录 简介 快速上手 配置 首页 组件Demo案例 简介 有时候我们可能很好奇,像elementUi或者vue3他们的文档网站是怎么写的,其实写vue文档网站的技术,有两个:一个是vuePress,一个是vitePress。从名字上可以看出来&#…

通过Shinami快速使用赞助交易(Gas代付)

Web3中对钱包和tokens的要求对于新用户来说是最大的挑战。Sui上的赞助交易不仅为用户提供丝滑的体验,还为构建者开辟了更多的收入模式。 按需付费的区块链模型直接支持网络基础设施,但对于那些已经习惯了Web2世界中看似免费服务的用户来说,这…

【计算机视觉】干货分享:Segmentation model PyTorch(快速搭建图像分割网络)

一、前言 如何快速搭建图像分割网络? 要手写把backbone ,手写decoder 吗? 介绍一个分割神器,分分钟搭建一个分割网络。 仓库的地址: https://github.com/qubvel/segmentation_models.pytorch该库的主要特点是&#…

UEditorPlus v3.3.0 图片上传压缩重构,UI优化,升级基础组件

UEditor是由百度开发的所见即所得的开源富文本编辑器,基于MIT开源协议,该富文本编辑器帮助不少网站开发者解决富文本编辑器的难点。 UEditorPlus 是有 ModStart 团队基于 UEditor 二次开发的富文本编辑器,主要做了样式的定制,更符…

了解IL汇编异常处理语法

从网上拷过来一个IL汇编程序,编译时先报如下错, 看它是把空格识别为了下注红线的字符,这是字符编码的问题,用记事本替换功能替换了; 然后又报如下的错, 看不出来问题,拷一句正确的来&#xff0…

周末在家值班,解决几个月前遗忘的Bug

问题: 周末被迫在家值班,无聊之际打开尘封已久的Bug清单,发现有Bug拖了几个月还没解决… 场景是这样子的,有个功能是拿Redis缓存热点数据进行展示,暂且称它为功能A,有个另外的功能B,它会去更新缓…