当前位置: 首页 > news >正文

随心玩玩(十)git

写在前面:研究生一年多了,一直浑浑噩噩的,在深度学习的泥潭挣扎了好久,终于走出了精神内耗的泥潭…好久没有写博客了,决定重新捡起来…记录一下学习吧~

之前写了一篇git的博客,【github 从0开始的基本操作到fork和pr项目】,感觉就是快速入门,没有掌握精髓,今天重新学习一下

感谢【GeekHour】在b站提供的免费视频教程

看了看了以前的博客有种梦回初始的感觉

优雅的分割线↓


文章目录

  • 初始化配置
  • 新建仓库
  • 工作区和文件状态
  • 添加和提交文件
  • 查看提交记录
  • reset 版本回退
  • diff 查看版本差异
  • 删除文件
  • .gitignore 忽略文件
  • 关联远程
  • GUI
  • 分支branch
  • 解决冲突
  • rebase变基
  • merge和rebase优缺点
  • 工作流 gitflow
  • GitHubflow

初始化配置

查看版本
git -v
配置全局用户名
git config --global user.name "likeghee"
配置全局邮箱
git config --global user.email likeghee@163.com
保存用户名和密码
git config --global credential.helper store
查看配置信息
git config --global credential.helper store

新建仓库

先在github创建仓库
然后用git clone远程仓库拉取
git clone

工作区和文件状态

git的本地数据管理分为三个区域
分别是工作区,暂存区和本地仓库

工作区:.git所在目录,我们实际操作的目录
暂存区:.git/index,用于临时存放即将提交修改的内容
本地仓库:.git/objects,Git存储代码和版本信息的主要位置

git add:从工作区提交到暂存区
git commit:从暂存区提到本地仓库

文件状态:
查看当前仓库的状态
git status
为跟踪:untrack,新创建还没有被git管理
未修改:unmodified,git管理但是文件内容没有发生变化
已修改:modified,git管理已经修改的文件但是还没有添加到暂存区中
已暂存:staged,已添加到暂存区中
在这里插入图片描述

添加和提交文件

创建文件
这里我创建了一个a.py,用git status查看当前仓库的状态
在这里插入图片描述

红色就是未被跟踪的状态,使用git add a.py添加到暂存区,再用用git status查看当前仓库的状态,现在的文件已经是绿色,表示现在这个文件已经被添加到了暂存区,等待被提交,同时bash还提示我们使用git restore --staged <file>...可以取消暂存
在这里插入图片描述
提交到本地仓库
git commit -m "第一次提交测试"
在这里插入图片描述

可以使用通配符提交文件
git add *.py
添加当前目录所有文件
git add .

交互式提交仓库
git commit
在这里插入图片描述
在第一行写下提交信息
在这里插入图片描述
:wq提交至仓库

查看提交记录

查看提交记录
git log
查看简洁的提交记录
git log --oneline

在这里插入图片描述

reset 版本回退

git reset --soft id:回退到某个版本,并且保留工作区和暂存区的所有内容
git reset --hard id:回退到某个版本,并且丢弃工作区和暂存区的所有内容
git reset --mixed id--mixed是默认参数,回退到某个版本,只保留工作区而丢弃暂存区内容
id使用git log --oneline查看
在这里插入图片描述

一般来说,当我们连续提交了多个版本,但是又觉得这些提交有没有太大的意义,可以合并成一个版本的时候,就可以通过–soft或者–mixed这两个参数回退之后再重新提交,使用--soft 可以节省一步git add的操作

一般谨慎使用--hard这个参数,工作区都删除了,那么就无法找回了

误操作可以使用git reflog查看操作的历史记录,找到误操作之前的版本号
再使用git reset --hard id回到之前版本即可

diff 查看版本差异

diff可以查看工作区、暂存区、本地仓库之间的差异
也可以查看不同版本之间的差异
或者两个分支之间的差异

开发的时候我们更多会使用GUI工具

我在a3.py添加了一行123
使用git diff查看修改内容,默认比较工作区和暂存区之间的内容

在这里插入图片描述
git会将文件的内容使用hash算法生成一个40位的hash值
e69de29..d800886就是hash值的前7位和后7位
100644 表示文件权限
红色表示删除,绿色表示添加

比较工作区和版本库之间的差异
git diff HEAD

比较工作区和版本库之间的差异
git diff --cached

比较两个版本之间的差异
git diff id1 id2

比较版本和当前版本之间的差异
git diff id1 HEAD

比较上个版本和当前版本之间的差异
git diff HEAD~ HEAD

比较上两个版本和当前版本之间的差异
git diff HEAD~2 HEAD

比较上个版本和当前版本中具体文件的差异
git diff HEAD~ HEAD a.txt

删除文件

删除文件
再用git add提交暂存区

这样有的人觉得太麻烦,可以使用
git rm
将上面的两步合并

只删除版本库的文件,保留工作区文件
git rm --cached

但是最后都是需要用git commit提交至版本库

.gitignore 忽略文件

应该忽略哪些文件?
系统或者软件自动生成的文件
编译生成的中间文件
运行过程中生成的日志文件、缓存文件、临时文件
涉及身份、密码、口令、密钥等敏感信息文件

.idea要不要提交到仓库里?我看了下这篇知乎文章

.idea目录下的文件中有包含隐私的内容(比如你的文件操作变动、用户词典、系统环境变量、数据库密码等等),所以我为了安全考虑就不提交到仓库了
在git项目的根目录下,添加一个 .gitignore 文件
在这里插入图片描述

.gitignore 文件中写上我们将要屏蔽的文件.idea/
注意文件夹格式是以/结尾的

.idea/

再用git status查看就屏蔽了这两个文件了
在这里插入图片描述

注意不会忽略doc下子目录下的.txt文件
doc/*.txt
如果要忽略可以使用
doc/**/.txt

关联远程

… or create a new repository on the command line

echo "# test" >> README.md
git init
git add README.md
git commit -m "first commit"
git branch -M main
git remote add origin https://github.com/yyz159756/test.git
git push -u origin main

… or push an existing repository from the command line

git remote add origin https://github.com/yyz159756/test.git
git branch -M main
git push -u origin main:main

GUI

https://git-scm.com/downloads/guis

推荐SourceTree
在这里插入图片描述

分支branch

创建一个dev分支
git branch dev

切换到dev分支
git switch dev

模拟一下dev的分支情况,现在main分支和dev分支已经分叉了,实际工作中这样情况是非常常见的,现在我们需要把dev分支合并到主线代码中
在这里插入图片描述

切换到main使用
git merge dev
将dev合并到main分支中
在这里插入图片描述

如果一个分支已经被合并到其他分支了,那么可以使用
git branch -d dev
来删除dev分支
在这里插入图片描述

解决冲突

我们创建一个feat分支,修改a.py
切换回main分支,我们也修改a.py
这样我们就有两个分支同时修改了a.py
在这里插入图片描述
我们在main分支尝试合并feat分支
git merge feat

就会出现conflict提示
在这里插入图片描述

使用git status查看冲突文件列表
在这里插入图片描述
git diff 查看具体的冲突的内容
在这里插入图片描述

=号上面的内容是main分支修改的内容
=号下面的内容是feat分支修改的内容

我们需要手动编辑这个文件
在这里插入图片描述
经过修改我们解决冲突

在这里插入图片描述
再进行git addgit commit
那么就自动完成了合并的过程
在这里插入图片描述

rebase变基

变基操作会找到当前两条分支的共同祖先,再把当前分支上从共同祖先到最新提交记录的所有提交移动到目标分支最新的提交的后面
变基到main,可以形象的表示成当前分支嫁接到main

切换dev,变基到main,那么就dev分支就会变基到dev
切换到main,变基到dev,那么main分支会变变基到dev

在这里插入图片描述

我们用之前学习的版本回退git rest来继续做实验

切换到dev,然后rebase

这时候dev分支就变基到了main上
在这里插入图片描述

merge和rebase优缺点

merge优点:不会破坏原分支的提交历史,方便回溯和查看
缺点:会产生额外提交节点,分支图复杂

rebase优点:不会新增额外的提交记录,形成线性历史,比较直观
缺点:改变提交历史,改变了当前分支branch out的节点,避免在共享分支上使用

工作流 gitflow

gitflow

main:只允许合并分支修改
hotfix:从main分支分离,修复完成后合并到main分支,一般会将hotfix分支删除
dev:从main分支分离,项目的核心分支
feat:从dev分支分离,用于开发新的功能
release:预发布分支,从dev分支分离,稳定后合并到主分支中,再将预发布分支删除

GitHubflow

只有main分支长期存在
1.git clone // 到本地
2.git checkout -b feat 切换至新分支feat
(相当于复制了remote的仓库到本地的xxx分支上
3.修改或者添加本地代码(部署在硬盘的源文件上)
4.git diff 查看自己对代码做出的改变
5.git add 上传更新后的代码至暂存区
6.git commit 可以将暂存区里更新后的代码更新到本地git
7.git push origin feat 将本地的featgit分支上传至github上的git


(如果在写自己的代码过程中发现远端GitHub上代码出现改变)
1.git checkout main 切换回main分支
2.git pull origin master(main) 将远端修改过的代码再更新到本地
3.git checkout xxx 回到xxx分支
4.git rebase main 我在xxx分支上,先把main移过来,然后根据我的commit来修改成新的内容
(中途可能会出现,rebase conflict -----》手动选择保留哪段代码)
5.git push -f origin xxx 把rebase后并且更新过的代码再push到远端github上
(-f —》强行)
6.原项目主人采用pull request 中的 squash and merge 合并所有不同的commit


远端完成更新后
1.git branch -d xxx 删除本地的git分支
2.git pull origin master 再把远端的最新代码拉至本地

相关文章:

随心玩玩(十)git

写在前面&#xff1a;研究生一年多了&#xff0c;一直浑浑噩噩的&#xff0c;在深度学习的泥潭挣扎了好久&#xff0c;终于走出了精神内耗的泥潭…好久没有写博客了&#xff0c;决定重新捡起来…记录一下学习吧~ 之前写了一篇git的博客&#xff0c;【github 从0开始的基本操作…...

每日一练【盛最多水的容器】

一、题目描述 11. 盛最多水的容器 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明&…...

Linux C语言 38-进程间通信IPC之信号

Linux C语言 38-进程间通信IPC之信号 本节关键字&#xff1a;C语言 进程间通信 信号量 semaphore 相关库函数&#xff1a;sem_init、sem_post、sem_wait、sem_destroy 提示&#xff1a;先做内容框架梳理&#xff0c;后期进行完善补充&#xff01; 什么是信号量&#xff1f; …...

前端使用 xlsx.js 工具读取 excel 遇到时间日期少 43 秒的解决办法

在使用 xlsx 读取 excel 的时间格式的数据时&#xff0c;如 ‘2023-11-30’&#xff0c;‘2023/11/30’ &#xff0c;默认会读取一串数字字符串&#xff0c;如&#xff1a;‘45260’&#xff0c;此时需要在 read 的时候传入一个配置项&#xff1a; import { read } from xlsxc…...

问题记录-maven依赖升级或替换(简单版)

问题背景 项目被检测到有高危漏洞&#xff0c;需要对部分jar进行升级。以一个jar为例记录一下升级过程。 1 找到高危漏洞的包 如果装了maven helper插件则可以在下面查看当前模块依赖包 2 使用maven命令 执行下面这个命令&#xff0c;会将当前项目的信息打印出来&#xff0c;…...

00Hadoop数据仓库平台

在这里是学习大数据的第一站 什么是数据仓库常见大数据平台组件及介绍 什么是数据仓库 在计算领域&#xff0c;数据仓库&#xff08;DW 或 DWH&#xff09;也称为企业数据仓库&#xff08;EDW&#xff09;&#xff0c;是一种用于报告和数据分析的系统&#xff0c;被认为是商业智…...

java-jar包

jar包类似于压缩包&#xff0c;主要是组织和分享自己的Java代码方便&#xff0c;将一组特定的java文件打包&#xff0c;一般是.class文件&#xff0c;不过并不限制文件类型&#xff0c;都可以打包。 jar包中包好清单文件&#xff0c;如果没有指定就会自动生成默认的&#xff0…...

Flink运行时架构核心概念

Flink运行时架构 JobManager&#xff1a;协调&#xff0c;决定何时调度下一个task&#xff0c;对失败任务做恢复。 ResourceManager: 负责Flink集群中的资源提供、回收、分配&#xff0c;它负责管理task slot。standalone模式下&#xff0c;不能自行启动新的taskmanagerDispatc…...

docker安装达梦数据库并挂在数据卷

离线包下载地址&#xff1a;请点击 1.在线下载 wget https://download.dameng.com/eco/dm8/dm8_20230808_rev197096_x86_rh6_64_single.tar2. 导入镜像 docker load -i dm8_20230808_rev197096_x86_rh6_64_single.tar3. 运行容器 docker run -d -p 5236:5236 --restartalwa…...

ROS第一个程序——helloworld

目录 一、工作空间的创建 1.创建工作空间并初始化 2.进入 src 创建 ros 包并添加依赖 二、C实现helloworld C源码实现 编辑 ros 包下的 Cmakelist.txt文件 进入工作空间目录并编译 执行 三、python实现helloworld 进入 ros 包添加 scripts 目录并编辑 python 文件 …...

【Python 训练营】N_17 冒泡排序

题目 列表L [3,2,5,6,1,3,8,1,9]&#xff0c;冒泡排序实现从小到大排列。 分析 冒泡排序的基本思想是从序列的第一个元素开始&#xff0c;依次比较相邻的两个元素&#xff0c;如果它们的顺序错误就交换它们的位置&#xff0c;直到整个序列有序为止。具体步骤如下&#xff1…...

虚拟机docker中的Nginx部署

Nginx部署 &#xff1a; 1.搜索nginx镜像 docker search nginx 2.拉取nginx镜像 docker pull nginx 3.创建目录 mkdir nginx cd nginx mkdir conf cd conf vim nginx.conf 4.编写nginx.conf配置文件 user nginx; worker_processes 1; error_log /var/log/nginx/erro…...

06、pytest将多个测试放在一个类中

官方用例 # content of test_class.py # 实例1 class TestClass:def test_one(self):x "this"assert "h" in xdef test_two(self):x "hello"assert hasattr(x,"check")# content of test_class_demo.py # 每个测试都有唯一的类实例…...

实体类转SQL工具类

主要的目标是简化开发人员在有实体类的情况下时做的重复性工作&#xff0c;提高开发效率。 单个实体类的转换工具类 1.EntityToTableConverter工具类 import java.io.FileWriter; import java.io.IOException; import java.lang.reflect.Field; import java.math.BigDecimal…...

高端制造业中的通用性超精密3D光学测量仪器

超精密光学3D测量仪器具有高精度、自动化程度高、实时反馈和范围广等优势。它能够实现微米级别的精确测量&#xff0c;能够精确测量产品的尺寸、形状和表面粗糙度等&#xff0c;具有广泛的应用价值和重要意义。 超精密光学3D测量仪器配备多种传感器、控制器和计算机系统&#…...

微信公众号非静默授权获取头像和昵称

要在Vue前端应用程序中实现微信公众号非静默授权获取头像和昵称&#xff0c;您需要遵循以下步骤&#xff1a; 1.在微信公众平台上注册并创建一个公众号。 2.在Vue项目中安装wechat-js-sdk库&#xff0c;该库提供了与微信JS-SDK的交互功能。 npm install wechat-js-sdk --sav…...

Java项目学生管理系统四编辑学生

编辑学生 欢迎阅读本篇博客&#xff0c;今天我们将继续探索Java项目学生管理系统的功能&#xff0c;重点关注学生信息的修改模块。在学生管理系统中&#xff0c;修改学生信息是一个关键操作&#xff0c;通过该功能可以方便地更新学生的个人信息、成绩以及其他相关数据。通过本…...

不同数据库进行同步和增量数据(SQL server 与MySQL数据库为例)

场景 最近在做的一个项目需要将远程服务器的SQL server数据库中表的数据传输到本机的MySQL数据库中&#xff0c;并且远程的SQL server数据库表的数据会实时进行更新&#xff0c;并且差不多是一分钟内传输18条数据&#xff0c;例如现在是2023-12-4 15:09&#xff0c;在15:08这个…...

国内的几款强大的AI智能—AI语言模型

R5Ai智能助手是一款由百度研发的文心一言&#xff0c;它支持gpt4 / gpt-3.5 / claude&#xff0c;也支持AI绘画&#xff0c;每天提供十次免费使用机会&#xff0c;无需魔法。该智能助手具有以下优点&#xff1a;会画画&#xff0c;没有使用次数限制&#xff0c;可以在界面上找到…...

linux下恶意软件的七种反分析技术

7 类主流的 Linux 恶意软件反分析/检测躲避技术 反调试&#xff08;Anti-Debug&#xff09;: 软件调试是恶意软件分析的常⽤⼿段之⼀&#xff0c;但恶意软件可以通过识别调试器特征&#xff0c;实现⾃⾝恶意⾏为的隐藏&#xff0c;或导致调试失败&#xff0c;从⽽规避分析与检测…...

Spring Security OAuth2 认证服务器自定义异常处理

目录 前言WebResponseExceptionTranslator自定义异常处理1、自定义我们响应实体类2、定义响应结果枚举类3、自定义异常转换类4、配置自定义异常转换器5、测试 前言 Spring Security OAuth2 认证失败的格式如下 {"error": "unsupported_grant_type","…...

selenium环境安装

一、下载安装python 下载python安装python设置python环境变量安装selenium &#xff08;1&#xff09;下载python 您可以从Python官方网站&#xff08;https://www.python.org/downloads/&#xff09;下载Python。在页面上&#xff0c;您将看到不同版本的Python供您选择。根…...

(C++)和为s的两个数字--双指针算法

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 和为S的两个数字_牛客题霸_牛客网输入一个升序数组 array 和一个数字S&#xff0c;在数组中查找两个数&#xff0c;使得他们的和正好是S&#xff0c;如果。题目来自【牛客题霸】https://www.nowcoder.com/practice/390da4f7a…...

鸿蒙(HarmonyOS)应用开发——构建页面(题目答案)

判断题 1.在Column容器中的子组件默认是按照从上到下的垂直方向布局的&#xff0c;其主轴的方向是垂直方向&#xff0c;在Row容器中的组件默认是按照从左到右的水平方向布局的&#xff0c;其主轴的方向是水平方向。 正确(True) 2.List容器可以沿水平方向排列&#xff0c;也可…...

Python基础快速过一遍

文章目录 一、变量及基本概念1、变量2、变量类型3、变量格式化输出4、type()函数5、input()函数6、类型转换函数7、注释 二、Python运算/字符1、算数运算2、比较运算3、逻辑运算4、赋值运算符5、转义字符6、成员运算符 三、判断/循环语句1、if判断语句2、while循环语句3、for循…...

等保测评报价相差很大,里面有什么门道

等保测评报价的差异主要源于以下几点&#xff1a; 服务质量评估标准不同&#xff1a;不同的测评机构在测评过程中所提供的服务范围、深度、细节等方面可能存在差异&#xff0c;因此导致报价有所不同。一些机构可能提供全面且细致的测评服务&#xff0c;致力于提供高质量的等保测…...

MATLAB的rvctools工具箱熟悉运动学【机械臂机器人示例】

1、rvctools下载安装 rvctools下载地址&#xff1a;rvctools下载 截图如下&#xff0c;点击红色箭头指示的“Download Shared Folder” 即可下载 下载之后进行解压&#xff0c;解压到D:\MATLAB\toolbox这个工具箱目录&#xff0c;这个安装路径根据自己的情况来选择&#xff0c…...

如何精准操作无人机自动停机坪?

无人机自动停机坪通过自主导航和避障功能&#xff0c;实现了无人机的自主降落和起飞&#xff0c;在无人机技术领域起到了至关重要的作用。停机坪不仅仅是无人机的起降平台&#xff0c;还具备自动换电或充电等功能&#xff0c;为无人机的自动化提供了关键支持。为更有效地操作无…...

【蓝桥杯】带分数

带分数 题目要求用一个ab/c的形式得到一个值&#xff0c;而且只能在1~9里面不重复的组合。 可以对1~9进行全排列&#xff0c;然后不断划分区间。 #include<iostream> #include<vector> using namespace std; int st[15]; int num[15]; int res; int n;int calc(i…...

软件工程 课堂测验 选择填空

系统流程图用图形符号表示系统中各个元素&#xff0c;表达了系统中各个元素之间的 信息流动 喷泉模型是一种以用户需求为动力&#xff0c;以 对象 为驱动的模型。 软件生存周期中最长的是 维护 阶段。 变换流的DFD由三部分组成&#xff0c;不属于其中一部分的是 事务中心 软…...

包头做网站要多少钱/石狮seo

变量 变量的使用 php定义时不需要关键字&#xff0c;但必须使用$符号 这里的echo就是输出的意思&#xff0c;相当于python中的print 删除变量用unset()方法&#xff0c;为什么要干掉它&#xff0c;就是因为要释放内存 变量命名规则 1、变量名字必须以"$"开头&…...

wordpress 面包插件/在线培训网站次要关键词

我们知道目前很多应用系统中的内容传输协议采用的HTTP协议&#xff0c;因此不管你是前端人员、后端人员、运维人员&#xff0c;甚至是管理人员&#xff0c;都需要掌握HTTP知识&#xff01;&#xff01;HTTP发展历史 HTTP/0.9 该版本只有一个命令GET&#xff1b;没有HEADER等描…...

东莞网站建设定制/疫情最新数据消息

深入理解Class---常量池一、概念1、jvm生命周期启动&#xff1a;当启动一个java程序时&#xff0c;一个jvm实例就诞生了&#xff0c;任何一个拥有main方法的class都可以作为jvm实例运行的起点。运行&#xff1a;main()函数作为程序初始线程起点&#xff0c;其它线程由该线程启动…...

做的网站怎么提交到百度上去/网络推广主要工作内容

可维护性是大多数开发者在编写单元测试时面对的最核心的问题之一&#xff0c;最终&#xff0c;随着项目的发展&#xff0c;测试可能会变得越来越难以维护和理解&#xff0c;系统的每一个改变&#xff0c;即使没有缺陷&#xff0c;也可能导致测试失败。本文将从以下几个大的方面…...

茂名网站建设方案外包/米拓建站

经纬度计算距离和方位角方位角(azimuthangle)&#xff1a;从某点的指北方向线起&#xff0c;依顺时针方向到目标方向线之间的水平夹角&#xff0c;叫方位角。(一)方位角的种类由于每点都有真北、磁北和坐标纵线北三种不同的指北方向线&#xff0c;因此&#xff0c;从某点到某一…...

佛山格尔做网站的公司/百度收录的网页数量

Linux系统中查看CPU和内存使用情况&#xff0c;是一个运维工程师常见的事情&#xff0c;下面分享一下。 目 录 1.top命令 2.ps命令 3.free命令 1.top命令 top命令是Linux下常用的性能分析工具&#xff0c;能够实时显示系统中各个进程的资源占用状况&#xff0c;类似于Windo…...