GIT基础01 基础命令与分支

前言

我们知道git是开发中比较常见的版本控制工具

我们可以先提出一个场景:

老板让你去修改方案 

第一次修改 打回

第二次修改 打回

第n次修改 老板让你使用第一次的版本  阁下如何应对???

我对每个版本进行编号??  是一种方案

但是这里也是有缺陷的  比如说在很多版本中找一个有特定功能的版本不好找  

此时我们就可以使用git

git可以记录每个文本文件的新增 二进制大小的更新

命令 

安装命令

sudo yum install  -y  git

初始化仓库

git init

新增配置项

git config user.name qqsbx
git config user.email "1815798600"//注意这里的变量需要配置全局  不然只是这个仓库这里有用 所以我们加上--globalgit  config --golbal user.name qqsbx

删除配置项

git config --global --unset  属性

下面我们提出git的三个重要概念区域 

工作区       暂存区    版本库

我们执行了以上命令git就能管理了吗???

并不见得   我们需要将对应的文件进行add     commit才行

这里add就是将文件上传到暂存区   commit就是将缓存区的文件提交就行版本控制 主要的流程如下

这里的版本控制咋实现的??

其实就是维护一个objects对象库   

然后对应的master分支等就是保存起的版本索引  

每次只切换索引 修改索引即可 比较轻量级

master分支下也是一个目录树,存储的也是索引

只要拿到对应的head指针就能拿到 master分支 就能拿到对象 

添加命令

git add .  就是将所有的新增文件加进去暂存区
git add  file  也可以输入文件名来进行添加

   确认命令

git commit -m  "描述"

查看日志

git log
//查看好看的日志 一行展示
git log --pretty=oneline

我们知道对应的git仓库就是隐藏文件.git

这里.git/HEAD中存放的就是master

master中存放的就是对应的本地提交的一个commitID

查看git文件的内容

git cat-file -p commitID

注意一定要add了之后才能commit 

git追踪管理的并不是文件  而是对修改追踪

我们可以查看仓库状态来查看

查看仓库状态

git status 

也可以查看到文件的新增内容

查看文件变化内容

git diff  file(文件名)

OK下面就到了我们最经典的版本控制以及回退功能的操作了

这里我们先画个图理解一下

版本回退

git  reset    --soft/--mixed/--hard   HEAD

这里的soft就是只回退工作区

mixed可以省略是默认的    是回退工作区和暂存区

hard也是最危险的 可以直接回退工作区  暂存区  版本库的内容

我们可以通过以下命令来进行回退

git reset --hard commitID   
//这里commitID就代表了某个版本

然后如果我们回退错了

但是还记得新版本的版本commitId  也是可以进行恢复的

但是日志一多就很容易找不到之前的版本号

我们只想回退工作区的时候可以使用

git checkout -- 文件名  

我们想回退一个版本可以使用

git reset --hard HEAD^//这里的HEAD就表示当前版本,加上一个^就表示上一个版本
如果多加几个^就表示前n个版本

如果我们想进行删除文件可以使用以下命令

删除文件

rm file 
-> add  ->  commit或者可以使用git提供的命令
git rm file   ---> 这个命令是直接包含add操作的
后面直接commit 即可

分支管理

我们知道git一般是由多个分支的

我们在开发的时候是往往由不同的分支来开发

经过一定的审核之后再融入主分支的

这里每个文件的更新是以子节点的形式产生的

比如a文件更新了

这里在版本库下就是更新前的id 指向更新后的id

更新后的id是更新前id的子节点

下面是一个简单的创建分支的过程

查看分支

git branch

HEAD指针就是用来指向工作分支的

就是以HEAD分支来区分当前的工作分支是哪些

创建分支

git branch  分支名

假设我现在新增一个dev分支

结果图就是这样的

注意这里的分支是在最新的版本基础上创建出来的

所以新创建的dev分支就只有最新版本这一个版本的版本号

切换分支

git checkout 分支名

我们这个时候就可以切换到对应分支

然后使用 第一条命令 带星号指向的就是当前的工作分支

合并分支

git merge dev 

注意这里是不能再本分支上合并本分支的

一定要切换到其他分支才能合并本分支

删除分支

git branch -d 

创建并切换

git checkout -b 新分支名这里的-b 就是branch

我们知道这里的合并经常会出现合并冲突问题

解决方案也就是手动解决加上重新上传即可

手动解决就是git会给对应的文件加上一段代码进行选择

我们只需要选择我们需要的版本即可

修改完重新 add  commit 即可

我们举个例子

假设我在dev分支修改了原文件

然后再master分支也修改了这个文件

这个时候我们想把dev分支merge进master分支

就会出现合并冲突问题

类似于下图

此时的状态就是这样的

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

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

相关文章

通往糊涂之路 The road to serfdom

最近被推送了一本书,哈耶克的............ 试一试,看看能不能看懂,也许是通往糊涂之路。

品鉴中的品鉴笔记:如何记录和分享自己的品鉴心得

品鉴云仓酒庄雷盛红酒的过程,不仅是品尝美酒,更是一次与葡萄酒深度对话的旅程。为了更好地记录和分享自己的品鉴心得,养成写品鉴笔记的习惯是十分必要的。 首先,选择一个适合的记录工具。可以是传统的笔记本,也可以是…

【Linux线程(一)】线程初理解

前言: (一)线程的概念 (二)线程的理解 (三)示例 (四)线程优缺点 线程的优点 线程的缺点 (五)线程和进程的切换 1.线程的切换 2.进程的切换…

【eclipse】如何在IDE里创建一个Java Web项目?

如何在eclipse中创建一个动态Web项目并成功运行? 一、 最终效果 懒得写那么多了…我也不知道该怎么写了,有点乱,有问题可以在评论里留言,我看到会解决的,在这个过程中也踩到了一些坑,但好在有CSDN帮助解决…

自然语言转SQL(NL2SQL、Text2SQL)

使用 FastAPI 框架和 LangChain 库构建的简单 Web 服务,其目的是将自然语言处理(NLP)应用于 SQL 查询生成。以下是代码中使用的技术架构和业务流程的详细说明: 技术架构 FastAPI:一个现代、快速(高性能&am…

【HarmonyOS】综合应用-《校园通》

概念 本文结合之前的笔记文章知识点,做一个综合性的小应用。 创建一个ArkTS语言的鸿蒙项目,搭建首页面 其界面代码如下,该界面使用了垂直布局,相对布局,轮播布局,以及图片,文本等组件的综合运…

Shiro核心深度解析文档

1. Shiro的介绍 它是一个简单易用的java安全框架,可以运行在非Web环境 1.主要提供的功能 身份认证 大多时称为登录,这是证明用户身份的行为 授权管理 访问控制的过程,即决定"谁"可以做"什么" 会话管理 管理特定于用户的会话,在非Web环境也是这样 密码…

LeetCode1207独一无二的出现次数

题目描述 给你一个整数数组 arr,请你帮忙统计数组中每个数的出现次数。如果每个数的出现次数都是独一无二的,就返回 true;否则返回 false。 解析 正常的解法肯定是对每个元素使用一个hashmap,存元素及出现次数,然后通…

上云后,如何保障数据安全?

云计算可以在线保存大量数据,并可以在任何时间、任何设备上使用。灵活性、可扩展行以及性价比等诸多buff加持,使许多企业用它来管理庞大的数据。 云计算安全 云计算通过为数据处理、存储和访问提供方便和灵活的解决方案,彻底改变了组织的运…

LeetCode—设计循环队列(两种方法)

1.题目 2.思路一(数组) 通过数组进行模拟,通过操作数组的索引构建一个虚拟的首尾相连的环。再循环队列结构中,设置一个队首head和队尾tail,数组的大小固定为k。 初步分析:存在缺陷 改善假溢出问题&#…

机器学习之sklearn基础教程:新手入门指南

引言 在机器学习领域,sklearn(Scikit-learn)是一个广受欢迎的开源库,它为各种常见的机器学习算法提供了高效的实现。对于初学者来说,sklearn 提供了一个简单且易于上手的工具,可以用来实现分类、回归、聚类…

kubernetes集群svc的代理模式-iptables修改为ipvs

一、概述\ 我们都知道,k8s集群的外部网络分发,借助kube-proxy组件来完成; 问题:我们为什么要将代理模式修改为ipvs而不继续使用iptables呐? 1,iptables底层使用四表五链完成网络代理,效率比较低…