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

【git使用四】git分支理解与操作(详解)

目录

(1)理解git分支

主分支(主线)

功能分支

主线和分支关系

将分支合并到主分支

快速合并

非快速合并

git代码管理流程

(2)理解git提交对象

提交对象与commitID

Git如何保存数据

示例讲解

(3)git提交对象与分支

git分支的本质

git的默认分支

如何创建分支

HEAD指针是什么

(4)分支创建与切换

如何在指定的commit id点创建分支

查看各个分支当前所指的提交对象

分支切换与head指针变化

分支切换的好处

注意分支切换会改变你工作目录中的文件

查看分支交叉历史

Git分支本质

(5)Git头指针分离状态

1.什么是分离头指针状态?

2.产生head分离状态

3.游离状态下修改了工作区的内容然后提交会怎样呢?

4.案例讲解

(6)分支操作常用命令

分支查看、创建、删除和重命名

分支切换

分支差异查看

分支合并

git远程分支相关操作

(1)上传本地分支到远程分支

(2)拉取远程分支到本地分支

(3)删除远程分支

(3)远程分支与本地分支关联

(7)git本地分支如何与远端分支关联

(8)git pull的用法

(9)git push的用法


(1)理解git分支

主分支(主线)

在Git中新建一个项目后,默认有一个分支,即主分支。主分支一般表示项目的稳定版本,主分支应该包含稳定没有 Bug 的代码,并保持随时可以发布的状态,对于小型项目来说,只有一个主分支就够用了,每次我们提交都会创建一个commit节点。

$ git commit -m "c1"
$ git commit -m "c2"
$ git commit -m "c3"

上面的命令会创建三个commit节点,此时master分支如下图所示,代码经历了C1,C2,C3这三个版本,且master分支目前指向C3这个提交版本。

如果项目功能较复杂,且需要多次提交,不建议在主分支直接修改。主分支上应该只包合并提交,所有的迭代应该都在分支上进行。如果是简单的改动,直接在主分支修改也是可以的。

功能分支

当有新的功能要开发时,应该新建一个功能分支,比如创建一个名为a的分支,并切换到a分支,命令如下:

$ git checkout -b a

创建新分支时,新分支默认指向的代码提交版本为当前分支所指向的代码提交版本,比如这里新分支a指向的提交将为C3。此时当前分支为a,所指向的提交为C3。

接下来在a分支上创建两个提交,命令如下:

$ git commit -m "c4"
$ git commit -m "c5"

每次有新的提交后,分支都会指向最新的提交,两次提交后的提交树情况如下,此时主分支的代码版本为C3,a分支的代码版本为C5。

主线和分支关系

在Git中,分支(Branch)是一个非常核心的概念,它允许开发者在主线(通常是master或main分支)之外进行工作,而不影响主线上的代码。

因为主线和分支是两个独立的代码线,这样,你可以在一个分支上尝试新功能、修复bug或进行其他任何类型的开发,而不必担心破坏主线的稳定性。

通常主线就是当前项目正在运行的版本,假设为版本1.1,分支的作用就是尝试新开发一个功能或者修复某个bug,版本为1.2,当分支通过了所有必要的测试和调试,就可以将分支合并到主线,这样主线就从1.1版本升级到了1.2版本。

将分支合并到主分支

git merge有三种模式:git merge --ff/--no-ff/--ff-only。

先简单介绍一下 git merge 的三个合并参数模式:

  • -ff 自动合并模式:当合并的分支为当前分支的后代的,那么会自动执行 --ff (Fast-forward) 模式,如果不匹配则执行 --no-ff(non-Fast-forward) 合并模式
  • --no-ff 非 Fast-forward 模式:在任何情况下都会创建新的 commit 进行多方合并(即使被合并的分支为自己的直接后代)
  • --ff-only Fast-forward 模式:只会按照 Fast-forward 模式进行合并,如果不符合条件(并非当前分支的直接后代),则会拒绝合并请求并且退出。

快速合并

当功能分支开发完成后,需要合并回主分支,合并回主分支有两种选择,快速合并和非快速合并,二者的区别在于是否创建提交节点,命令如下:

$ git checkout master # 切换到master分支
$ git merge a  # 将a分支的内容合并到当前分支即master分支 # 快速合并
$ git merge --no-ff a # 非快速合并

快速合并的结果,会直接将 master 指向了a所指向的提交即C5,如下图所示:

非快速合并

非快速合并的结果,会在 master 创建合并提交节点,如下图所示:

使用git merge --no-ff来合并,使用该命令合并时会创建一个新的commit,所以加上-m参数,把commit描述写进去:git merge --no-ff -m "merge with no ff" dev。

两种合并方式都可以。当合并的分支跟 master 不存在共同祖先节点的时候,这时候在 merge 的时候 git 默认无法使用 Fast-forward 模式。推荐使用非快速合并。

git代码管理流程

以下是开发流程的一个详细的概述:

  1. 主线(main):这是项目的核心和稳定版本,比如版本1.1。所有的用户都从这个版本中获取功能,并且它代表了项目的当前状态。
  2. 创建分支:当需要开发新功能或修复bug时,你会从主线创建一个新的分支。这个新分支可以用来存放与版本1.2相关的所有更改。
  3. 在分支上工作:在新的分支上,你可以自由地添加新功能、修复bug或进行其他任何形式的代码更改。这些更改不会影响主线,因为主线和分支是两个独立的代码线。
  4. 测试和调试:在将更改合并到主线之前,你应该在分支上进行充分的测试和调试,以确保你的更改是稳定且按预期工作的。
  5. 合并分支:一旦你的更改在分支上通过了所有必要的测试和调试,你就可以将它们合并回主线了。这个过程会将这些更改从分支复制到主线,并创建一个新的提交,该提交包含了这些更改。
  6. 发布新版本:合并分支后,主线现在包含了版本1.2的所有更改。你可以将主线的代码发布为一个新的版本(即版本1.2),以便所有用户都可以访问和使用这些新功能或bug修复。
  7. 删除分支(可选):在将分支的更改合并到主线后,这个分支通常就没有用了,因此你可以将其删除以清理你的代码库。

(2)理解git提交对象

提交对象与commitID

  • 在进行提交操作(git commit)时,Git会保存一个提交对象(commit object)。知道了 Git保存数据的方式,我们可以很自然的想到——该提交对象会包含一个指向暂存内容快照的指针
  • 但不仅仅是这样,该提交对象还包含了作者的姓名和邮箱、提交时输入的信息以及指向它的父对象的指针
  • 首次提交产生的提交对象没有父对象,普通提交操作产生的提交对象有一个父对象,而由多个分支合并产生的提交对象有多个父对象
  • 每个提交对象都对应一个 commitID

Git如何保存数据

Git保存的不是文件的变化或者差异,而是一系列不同时刻的文件快照

示例讲解

我们假设现在有一个工作目录,里面包含了三个将要被暂存和提交的文件(README test.rb LICENSE):

  • 暂存操作:会为每一个文件计算校验和(SHA-1 哈希算法),然后会把当前版本的文件快照保存到Git仓库中(Git使用blob对象来保存它们),最终将校验和加入到暂存区域等待提交:git add README test.rb LICENSE,git commit -m 'The initial commit of my project'
  • 当使用git commit进行提交操作时:Git 会先计算每一个子目录(本例中只有项目根目录)的校验和,然后在Git仓库中这些校验和保存为树对象。随后,Git便会创建一个提交对象,它除了包含上面提到的那些信息外,还包含指向这个树对象(项目根目录)的指针。如此一来,Git就可以在需要的时候重现此次保存的快照。
  • 现在,Git 仓库中有五个对象:三个blob对象(保存着文件快照),一个树对象(记录着目录结构和blob对象索引),一个提交对象(包含着指向前述树对象的指针和所有提交信息)。

由于提交对象包含了全部信息,我们只需要关注提交对象即可,每个提交对象都对应一个 commitID。

提交对象及其树结构内容如下:

如果此时做些修改后再次提交(git commit),那么这次产生的提交对象会包含一个指向上次提交对象(父对象)的指针,如下图所示从左到右三次提交,最上方显示了其commitID。

(3)git提交对象与分支

git分支的本质

Git 的分支,其实本质上仅仅是指向提交对象的可变指针 。

git的默认分支

  • 备注:Github在2020.10.1将仓库的默认分支从master更改为main,下面我们仍以master作为介绍,但是你需要了解现在的默认分支已经是main了
  • Git的默认分支名字是master。在多次提交操作之后,你其实已经有一个指向最后那个提交对象的master分支。它会在每次的提交操作中自动向前移动
  • Git的“master”分支并不是一个特殊分支。它就跟其它分支完全没有区别。之所以几乎每一个仓库都有master分支,是因为git init命令默认创建它,并且大多数人都懒得去改动它

如何创建分支

Git是怎么创建新分支的呢?很简单,它只是为你创建了一个可以移动的新的指针

比如,创建一个testing分支,你需要使用git branch命令:

git branch testing

这会在当前所在的提交对象上创建一个指针

HEAD指针是什么

那么,Git又是怎么知道当前在哪一个分支上呢?也很简单,它有一个名为HEAD的特殊指针。在Git中,它是一个指针,用来表明当前所在的本地分支是哪个分支。例如在上面使用了git branch命令创建了一个"testing"分支,但你仍然在master分支上,因为git branch命令仅仅创建 一个新分支,并不会自动切换到新分支中去。如下图所示:

使用"git branch -a"可以查看本地仓库和远程仓库的全部分支,以及当前所在分支,如下示例可以看到当前分支在bran_test,就是head所指向的分支。

D:\projects\test>git branch -a
* bran_testdeal_datamasterremotes/origin/bran_testremotes/origin/deal_dataremotes/origin/masterD:\projects\test>

(4)分支创建与切换

如何在指定的commit id点创建分支

方法1、创建命令:git checout -b <new_branch_name>  <commid_id>

方法2:"git checkout <commid_id>" then "git switch -c <new_branch_name>"

查看各个分支当前所指的提交对象

你可以简单地使用git log命令查看各个分支当前所指的对象。提供这一功能的参数是--decorate。

git log --oneline --decorate

例如,下图显示当前“master”和“testing”分支均指向校验和以f30ab开头的提交对象。

分支切换与head指针变化

要切换到一个已存在的分支,你需要使用git checkout命令。

例如切换分支前是这样的

我们现在切换到新创建的testing分支去:

git checkout testing

执行上面的命令之后,HEAD就指向testing分支了,如下图所示

分支切换的好处

Git的分支切换有什么好处呢?下面进行一步一步的图解

第一步:在上面我们已经切换到testing分支下了,现在我们对一个文件进行修改并提交

vim test.rbgit commit -a -m 'made a change'

当执行完上面的命令之后,结果下图所示,你的testing分支向前移动了,但是master分支却没有,它仍然指向运行git checkout时所指的对象

第二步:假设现在我们再次切换回master分支,那么最终的结果会如下图所示,这一步做了两件事情:一是使HEAD指回master分支,二是将工作目录恢复成master分支所指向的快照内容

也就是说,你现在做修改的话,项目将始于一个较旧的版本。本质上来讲,这就是忽略testing分支所做的修改,以便于向另一个方向进行开发

git checkout master

第三步:现在我们在master分支上,现在我们再来做一些操作,结果会如下图所示,Git重新创建了一个提交对象指针

vim test.rbgit commit -a -m 'made other changes'

如上图所示,这个项目的提交历史已经产生了分叉。因为刚才你创建了一个新分支,并切换过去进行了一些工作,随后又切换回master分支进行了另外一些工作。上述两次改动针对的是不同分支:你可以在不同分支间不断地来回切换和工作,并在时机成熟时将它们合并起来。如何"git merge"参见下文。

注意分支切换会改变你工作目录中的文件

在切换分支时,一定要注意你工作目录里的文件会被改变。如果是切换到一个较旧的分支,你的工作目录会恢复到该分支最后一次提交时的样子。如果 Git 不能干净利落地完成这个任务,它将禁止切换分支。

查看分支交叉历史

你可以使用下面的命令查看分叉历史,它会输出你的提交历史、各个分支的指向以及项目的分支分叉情况

git log --oneline --decorate --graph --all 

示例

可以看到master先经过了三次commit,然后开启新分支testing,新分支testing有一次commit,master有一次commit,当前工作分支在master分支上。

Git分支本质

由于Git的分支实质上仅是包含所指对象校验和(长度为 40 的 SHA-1 值字符串)的文件,所以它的创建和销毁都异常高效。创建一个新分支就像是往一个文件中写入 41 个字节(40 个字符和 1 个换行符),如此的简单能不快吗?

这与过去大多数版本控制系统形成了鲜明的对比,它们在创建分支时,将所有的项目文件都复制一遍,并保存到一个特定的目录。完成这样繁琐的过程通常需要好几秒钟,有时甚至需要好几分钟。所需时间的长短,完全取决于项目的规模。而在Git中,任何规模的项目都能在瞬间创建新分支。同时,由于每次提交都会记录父对象,所以寻找恰当的合并基础(备注:即共同祖先)也是同样的简单和高效。这些高效的特性使得Git鼓励开发人员频繁地创建和使用分支。

(5)Git头指针分离状态

1.什么是分离头指针状态?

我们知道在Git中分支是指向提交,而HEAD指针指向分支。所谓的分离头指针状态就是HEAD不再指向分支,而是直接指向某个commit。

2.产生head分离状态

对于下图,此时分支master分支指向c1(c1是某次提交的commit id),HEAD指向master(master 后面的*号表明了HEAD当前指向的分支是master)。

进行任意一次提交,master分支会重新指向新的提交

如果执行 git checkout commitId就会导致HEAD指向该次提交,而不在指向分支

如果我们执行git checkout c2(c2是该次提交的commit id),结果如下:

可以看到此时HEAD指针不在指向master而是直接指向c2提交,此时头指针就处于分离状态。

3.游离状态下修改了工作区的内容然后提交会怎样呢?

游离状态时

如果这时候修改了工作区的内容然后提交会怎样呢?

可以看到此时这个提交不在任何分支上。如果此时切换回master分支,你会发现刚刚在分离头指针状态下对文件做了修改提交在master分支下是看不到的,并且由于c3这次提交不在任何分支上,在未来极有可能会被Git清理掉。我们知道如何合并分支,但是没办法将c3这个提交给合并过来,难道我们刚刚在c3上做的大量修改都要重写?聪明的git早就给我们提示了,可以给这个分离的提交创建一个分支,然后在将这个分支合并到master中,最后删除这个临时的分支。

通过git branch branchName commitId给这个提交创建一个临时的分支,这个分支是基于头指针分离下修改提交的commit id创建的。

将分支temp合并到当前分支(即master分支):git merge temp

最后删除临时分支:git branch -d temp

4.案例讲解

创建一个仓库,在工作区增加test.txt,然后基于这个文件做两次commit。

可以清楚的看到此时的HEAD是指向master的(HEAD -> msstaer),而master指向最近一次提交。

看一下test.txt文件:

现在开始分离HEAD指针,让HEAD直接指向最近一次提交。

注意观察,当我们执行git checkout 8fcba5e37c,git会提示我们当前处于分离头指针状态,并且HEAD指向8fcba5e37c这次提交。

执行git status看看,可以看到HEAD指针指向的是提交。

现在HEAD指针指向的是提交,这时我们再修改test.txt文件,然后提交。

git提示我们在分离HEAD指针状态下提交了修改。再打开test.txt文件看一眼:enmmm,没毛病。

重点来了!现在切换回master分支:

ok!成功切换了,但是git给我们警告了,有一个未被关联在任何分支上的提交,并且告诉我们可以使用git branch branchName 5e2e3f7 为5e2e3f7这次提交创建一个分支。先来瞅一眼此时的test.txt文件:

enmm,确实少了789。如果我们执行gitk --all命令会弹出一个界面如下:

从这个界面我们可以发现,只能看到两次提交记录,关于789的提交记录看不到,这是因为它没有关联在任何分支上,并且在未来git也极有可能会把它清理掉。

执行git branch temp 5e2e3f7 为该提交创建一个temp分支,然后合并分支,最后删除temp分支:

最后再瞅一眼test.txt。enmm,没毛病。

(6)分支操作常用命令

分支查看、创建、删除和重命名

  • git branch //查看本地所有分支和当前所在本地分支
  • git branch -r //查看远程所有分支
  • git branch -a //查看本地和远程所有分支和当前所在本地分支
  • git branch -v // 查看分支对应的提交ID以及提交注释
  • git branch 分支名称 // 创建本地分支,指向当前分支所指向commitID(当前分支指向的最新commitID可以通过"git log"命令查看)
  • git branch slave master // 在现有的master分支上创建slave分支
  • git branch 分支名称 commitID // 创建本地分支,且指向commitID提交
  • git branch -d 分支名称 //删除本地分支
  • git branch -D 分支名称 //强行删除本地分支
  • git branch -m oldName newName // 重命名本地分支

分支切换

  • git checkout 分支名称 //切换本地分支(如果不存在该本地分支,但存在该远程分支时,会自动创建该本地分支并自动追踪远程分支)在切换分支时,一定要注意你工作目录里的文件会被改变。如果是切换到一个较旧的分支,你的工作目录会恢复到该分支最后一次提交时的样子。如果 Git 不能干净利落地完成这个任务,它将禁止切换分支
  • git checkout -b 分支名称 //创建+切换分支(等价于先git branch,再git checkout)

分支差异查看

  • git diff 分支1 分支2  显示出所有有差异的文件的详细差异
  • git diff 分支1 分支2 --stat  显示出所有有差异的文件列表

分支合并

  • git merge 分支名称 //将该分支合并到当前分支
  • git merge 原分支 目标分支 // 合并分支
  • git merge --ff/--no-ff/--ff-only三个合并参数模式:自动合并模式(默认值)、非 Fast-forward 模式、Fast-forward 模式

git远程分支相关操作

(1)上传本地分支到远程分支

当我们在本地分支中进行了一些修改,想要将这些修改推送到远程分支中,需要使用git push命令:

git push origin local_branch:remote_branch

其中,local_branch是本地分支的名称,remote_branch是远程分支的名称。如果这个远程分支不存在,会自动创建一个新的分支。如果省略remote_branch参数,Git会自动将本地分支推送到与之同名的远程分支。

git push origin new_branch

git push命令将本地的new_branch分支与远程的origin仓库中的new_branch分支关联起来。如果这个分支在远程仓库中不存在,会自动创建一个新的分支。

(2)拉取远程分支到本地分支

如果我们想要从远程仓库中拉取最新的代码到本地分支中,并且使得本地分支与远程分支保持同步,可以使用git pull命令。例如,我们想要拉取origin仓库中的master分支:

# 拉取origin仓库中的master分支代码到本地分支中
git pull origin master# 拉取origin仓库中的new_branch分支代码到本地分支中
git pull origin new_branch

Git会自动将远程代码合并到本地代码中,并且创建一个新的提交。如果有代码冲突,需要手动解决冲突。

(3)删除远程分支

如果我们不再需要某个远程分支,需要将其从远程仓库中删除,可以使用git push命令。

git push --delete origin 远程分支名称   // 删除远程分支
git push origin --delete remote_branch

其中,remote_branch是需要删除的远程分支的名称。请注意,删除远程分支会永久删除所有已经提交到这个分支中的代码,所以请谨慎操作。

(3)远程分支与本地分支关联

  • git branch --set-upstream-to=origin/远端分支名 // 把本地当前分支与指定的远程分支关联
  • git branch --set-upstream-to=origin/远程分支名称 本地分支名称 //将本地分支与远程分支建立关联

(7)git本地分支如何与远端分支关联

1、本地和远端都没有分支的情况

第一步:在本地创建分支test

git checkout -b test

第二步:在远端创建分支test,并将本地分支与之相关联

git push --set-upstream origin test

2、本地有分支,远端没有分支

参考情况1的第二步

3、本地无分支,远端有分支

第一步:使用git pull命令获取远端代码并与本地代码合并

git pull

第二步:创建本地分支并与远端分支相关联

git checkout -b test origin/test

4、本地和远端都有分支但是未关联

git branch --set-upstream-to=origin/远端分支名 本地分支名

(8)git pull的用法

git pull作用

取回远程主机某个分支的更新,再与本地的指定分支合并

使用语法

git pull <远程主机名> <远程分支名>:<本地分支名>

比如,要取回origin主机的next分支,与本地的master分支合并,需要写成下面这样

git pull origin next:master

如果远程分支(next)要与当前分支合并,则冒号后面的部分可以省略。上面命令可以简写为:

git pull origin next

上面命令表示,取回origin/next分支,再与当前分支合并。

实质上,这等同于先做git fetch,再执行git merge

git fetch origin
git merge origin/next

如果当前分支与远程分支存在追踪关系,git pull就可以省略远程分支名,命令如下。下面这个命令表示本地的当前分支自动与对应的origin主机”追踪分支”(remote-tracking branch)进行合并

git pull origin

如果当前分支只有一个追踪分支,连远程主机名都可以省略。下面这个命令表示当前分支自动与唯一一个追踪分支进行合并。

git pull

(9)git push的用法

作用:

git push是GIT中的一个命令,是将本地仓库某个分支的代码提交到远程仓库某个分支的命令

基本语法:

git push [远程库名] [本地分支名]  [远程分支名]

例如 git push origin master:refs/for/master ,即是将本地的master分支推送到远程主机origin上的对应master分支, origin 是远程主机名,第一个master是本地分支名,第二个master是远程分支名。

例如,我们将本地分支master推送到远程库origin的test分支上,可以使用以下命令

git push origin master:test

如果要推送的远程分支与本地分支名称一样,则还可以简写

git push origin master

这条命令的意思是将本地分支master推送到远程库origin的master分支上

如果当前分支与远程分支存在追踪关系,则本地分支和远程分支都可以省略,将当前分支推送到origin主机的对应分支 

git push origin

如果当前分支只有一个远程分支,那么主机名都可以省略

git push

有时候,本地分支的内容和远程分支的内容存在冲突,我们需要强制覆盖远程分支,可以使用以下命令

git push -f [远程库名] [本地分支名]  [远程分支名]

end

相关文章:

【git使用四】git分支理解与操作(详解)

目录 &#xff08;1&#xff09;理解git分支 主分支&#xff08;主线&#xff09; 功能分支 主线和分支关系 将分支合并到主分支 快速合并 非快速合并 git代码管理流程 &#xff08;2&#xff09;理解git提交对象 提交对象与commitID Git如何保存数据 示例讲解 &a…...

【docker】如何解决artalk的跨域访问问题

今天折腾halo的时候&#xff0c;发现artalk出现跨域访问报错&#xff0c;内容如下。 Access to fetch at https://artk.musnow.top/api/stat from origin https://halo.musnow.top has been blocked by CORS policy: The Access-Control-Allow-Origin header contains multipl…...

MYSQL 索引下推 45讲

刘老师群里,看到一位小友 问<MYSQL 45讲>林晓斌的回答 大意是一个组合索引 (a,b,c) 条件 a > 5 and a <10 and b123, 这样的情况下是如何? 林老师给的回答是 A>5 ,然后下推B123 小友 问 "为什么不是先 进行范围查询,然后在索引下推 b123?" 然后就…...

CentOS7服务器中安装openCV4.8的教程

参考链接&#xff1a;Centos7环境下cmake3.25的编译与安装 参考链接&#xff1a;Linux安装或者升级cmake&#xff0c;例子为v3.10.2升级到v3.25.0(自己指定版本) 参考链接&#xff1a;Linux安装Opencv&#xff08;C&#xff09; 一、下载资源 1.下载cmake3.25.0的压缩包&am…...

Java课程设计:基于swing的贪吃蛇小游戏

文章目录 一、项目介绍二、核心代码三、项目展示四、源码获取 一、项目介绍 贪吃蛇是一款经典的休闲益智游戏,自问世以来便深受广大用户的喜爱。这个游戏的基本玩法是控制一条不断增长的蛇,目标是吃掉屏幕上出现的食物,同时避免撞到边缘或自身。随着游戏的进行,蛇的身体会越长…...

【HarmonyOS】HUAWEI DevEco Studio 下载地址汇总

目录 OpenHarmony 4.x Releases 4.1 Release4.0 Release OpenHarmony 3.x Releases 3.2.1 Release3.2 Release3.1.3 Release3.1.2 Release3.1.1 Release3.1 Release 说明 Full SDK&#xff1a;面向OEM厂商提供&#xff0c;包含了需要使用系统权限的系统接口。 Public SDK&am…...

华为OD刷题C卷 - 每日刷题30(小明找位置,分隔均衡字符串)

1、&#xff08;小明找位置&#xff09;&#xff1a; 这段代码是解决“小明找位置”的问题。它提供了一个Java类Main&#xff0c;其中包含main方法和getResult方法&#xff0c;用于帮助小明快速找到他在排队中应该站的位置。 main方法首先读取已排列好的小朋友的学号数组和小…...

SOFTS: 时间序列预测的最新模型以及Python使用示例

近年来&#xff0c;深度学习一直在时间序列预测中追赶着提升树模型&#xff0c;其中新的架构已经逐渐为最先进的性能设定了新的标准。 这一切都始于2020年的N-BEATS&#xff0c;然后是2022年的NHITS。2023年&#xff0c;PatchTST和TSMixer被提出&#xff0c;最近的iTransforme…...

C++ 取近似值

描述 写出一个程序&#xff0c;接受一个正浮点数值&#xff0c;输出该数值的近似整数值。如果小数点后数值大于等于 0.5 ,向上取整&#xff1b;小于 0.5 &#xff0c;则向下取整。 数据范围&#xff1a;保证输入的数字在 32 位浮点数范围内 输入描述&#xff1a; 输入一个正…...

云原生系列之Docker常用命令

&#x1f339;作者主页&#xff1a;青花锁 &#x1f339;简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java微服务架构公号作者&#x1f604; &#x1f339;简历模板、学习资料、面试题库、技术互助 &#x1f339;文末获取联系方式 &#x1f4dd; 系列文章目录 云原生之…...

opencv_GUI

图像入门 import numpy as np import cv2 as cv # 用灰度模式加载图像 img cv.imread(C:/Users/HP/Downloads/basketball.png, 0)# 即使图像路径错误&#xff0c;它也不会抛出任何错误&#xff0c;但是打印 img会给你Nonecv.imshow(image, img) cv.waitKey(5000) # 一个键盘绑…...

FlowUs轻量化AI:趁这波升级专业版,全年无限AI助力笔记产出与二次编写

在数字时代&#xff0c;信息管理与知识产出的效率直接影响个人的生产力。FlowUs作为一款集笔记、文档、多维表、文件夹于一体的新一代知识管理平台&#xff0c;其轻量化AI的加入更是如虎添翼。特别是在活动期间&#xff0c;升级专业版将带来全年无限AI使用次数&#xff0c;让每…...

Day 22:2786. 访问数组中的位置使分数最大

Leetcode 2786. 访问数组中的位置使分数最大 给你一个下标从 0 开始的整数数组 nums 和一个正整数 x 。 你 一开始 在数组的位置 0 处&#xff0c;你可以按照下述规则访问数组中的其他位置&#xff1a; 如果你当前在位置 i &#xff0c;那么你可以移动到满足 i < j 的 任意 …...

理解Es的DSL语法(二):聚合

前一篇已经系统介绍过查询语法&#xff0c;详细可直接看上一篇文章&#xff08;理解DSL语法&#xff08;一&#xff09;&#xff09;&#xff0c;本篇主要介绍DSL中的另一部分&#xff1a;聚合 理解Es中的聚合 虽然Elasticsearch 是一个基于 Lucene 的搜索引擎&#xff0c;但…...

matlab-2-simulink-小白教程-如何绘制电路图进行电路仿真

以上述电路图为例&#xff1a;包含D触发器&#xff0c;时钟CLK,与非门 一、启动simulink的三种方式 方式1 在MATLAB的命令行窗口输入“Simulink”命令。 方式2 在MATLAB主窗口的“主页”选项卡中&#xff0c;单击“SIMULINK”命令组中的Simulink命令按钮。 方式3 从MATLAB…...

CSS从入门到精通——背景样式

目录 背景颜色 任务描述 相关知识 背景色 编程要求 背景图片 任务描述 相关知识 背景图片 设置背景图片 平铺背景图像 任务要求 背景定位与背景关联 任务描述 相关知识 背景定位 背景关联 简写背景 编程要求 背景颜色 任务描述 本关任务&#xff1a;在本关…...

网络编程---Java飞机大战联机

解析服务器端代码 代码是放在app/lib下的src下的main/java&#xff0c;而与之前放在app/src/main下路径不同 Main函数 Main函数里只放着创建MyServer类的一行 public static void main(String args[]){new MyServer();} MyServer构造函数 1.获取本机IP地址 //获取本机IP地…...

一个简单的Oracle函数

CREATE OR REPLACE FUNCTION getyj_zhibiao_value(p_name IN varchar2, p_index IN varchar2) RETURN NUMBER IS -- 定义返回的指标值变量 v_result NUMBER; -- 定义临时变量来存储查询到的指标值 v_index1 VARCHAR2(50); v_index2 VARCHAR2(50); …...

word中根据上级设置下级编号

如上级是3.13.4&#xff0c;如下图 现在想设置下级编码跟随上级逐级显示成3.13.4.1 则在标题功能说明这点击顶部菜单栏的编号按钮&#xff0c;如下图 然后&#xff0c;选择自定义编号-自定义列表-自定义按钮 然后重点是编号格式这一栏&#xff0c;需要手动填写下前三级的编号&…...

【康复学习--LeetCode每日一题】2786. 访问数组中的位置使分数最大

题目描述&#xff1a; 给你一个下标从 0 开始的整数数组 nums 和一个正整数 x 。 你一开始 在数组的位置 0 处&#xff0c;你可以按照下述规则访问数组中的其他位置&#xff1a; 如果你当前在位置 i &#xff0c;那么你可以移动到满足 i < j 的 任意 位置 j 。 对于你访问的…...

bash和sh区别

bash 和 sh 是两种常用的 Unix Shell&#xff0c;它们有一些区别&#xff0c;特别是在功能和兼容性方面。以下是一些主要的区别&#xff1a; 1. **历史与实现**&#xff1a; - sh&#xff08;Bourne Shell&#xff09;是第一个 Unix Shell&#xff0c;最初由 Stephen Bourn…...

Git 代码管理规范 !

分支命名 master 分支 master 为主分支&#xff0c;也是用于部署生产环境的分支&#xff0c;需要确保master分支稳定性。master 分支一般由 release 以及 hotfix 分支合并&#xff0c;任何时间都不能直接修改代码。 develop 分支 develop 为开发环境分支&#xff0c;始终保持最…...

MGRS坐标

一 概述 MGRS坐标系统&#xff0c;即军事格网参考系统&#xff0c;是北约(NATO)军事组织使用的标准坐标系统。它基于UTM&#xff08;通用横向墨卡托&#xff09;系统&#xff0c;并将每个UTM区域进一步划分为100km100km的小方块。这些方块通过两个相连的字母标识&#xff0c;其…...

FreeRTOS简单内核实现4 临界段

文章目录 0、思考与回答0.1、思考一0.2、思考二0.3、思考三 1、关中断1.1、带返回值1.2、不带返回值 2、开中断3、临界段4、应用 0、思考与回答 0.1、思考一 为什么需要临界段&#xff1f; 有时候我们需要部分代码一旦这开始执行&#xff0c;则不允许任何中断打断&#xff0…...

Scala的字符串插值

Scala的字符串插值 期待您的关注 ☀Scala学习笔记 目录 Scala的字符串插值 1. s插值器&#xff1a; 2. f插值器&#xff1a; 3. raw插值器&#xff1a; 在Scala中&#xff0c;字符串插值是一种方便的方式&#xff0c;可以在字符串中插入变量或表达式的值。Scala支持三种类型…...

EasyGBS服务器和终端配置

服务器配置 修改easygbs.ini sip/host为本机IP&#xff0c;否则终端能登录&#xff0c;无法视频。 [sip] host192.168.3.190 终端用于登录的用户名和密码 default_usertest default_passwordtest1234 default_guest_userguest default_guest_passwordtest1234终端配置 关…...

git配置2-不同的代码托管平台配置不同的ssh key

1. 配置单个ssh key 1.1. 原理1.2. 生成 ssh key1.3. 代码托管平台配置公钥 2. 配置多个ssh key 2.1. 应用场景2.2. 生成两个不同的key2.3. 修改config文件2.4. 配置代码托管平台2.5. 测试是否成功 1. 配置单个ssh key 1.1. 原理 使用ssh命令行工具&#xff08;git安装成功…...

【CT】LeetCode手撕—102. 二叉树的层序遍历

目录 题目1-思路2- 实现⭐102. 二叉树的层序遍历——题解思路 3- ACM实现3-1 二叉树构造3-2 整体实现 题目 原题连接&#xff1a;102. 二叉树的层序遍历 1-思路 1.借助队列 Queue &#xff0c;每次利用 ①while 循环遍历当前层结点&#xff0c;②将当前层结点的下层结点放入 …...

Flink 命令行提交、展示和取消作业

Apache Flink 是一个流处理和批处理的开源框架&#xff0c;用于在分布式环境中执行无边界和有边界的数据流。你可以使用 Flink 的命令行界面&#xff08;CLI&#xff09;来提交、展示和取消作业。 提交作业 使用 Flink CLI 提交作业的命令格式通常如下&#xff1a; ./bin/fl…...

STM32单片机选型方法

一.STM32单片机选型方法 1.首先要确定需求&#xff1a; 性能需求&#xff1a;根据应用的复杂度和性能要求&#xff0c;选择合适的CPU性能和主频。 内存需求&#xff1a;确定所需的内存大小&#xff0c;包括RAM和Flash存储空间。 外设需求&#xff1a;根据应用所需的功能&…...