Git基础知识:常见功能和命令行

文章目录

    • 1.Git介绍
    • 2.安装配置
      • 2.1 查看配置信息
    • 3.文件管理
      • 3.1 创建仓库
      • 3.2 版本回退
      • 3.3 工作流程
      • 3.4 撤销修改
      • 3.5 删除文件
    • 4.远程仓库
      • 4.1 连接远程库
      • 4.2 本地上传至远程
      • 4.3 从远程库克隆到本地
    • 5.分支管理
      • 5.1 创建分支
      • 5.2 删除分支
      • 5.3 合并分支+解决冲突

参考:
Git教程|菜鸟网络
Git教程—廖雪峰

1.Git介绍

  • 版本控制系统

Git 是一个开源的分布式版本控制系统,能敏捷高效地处理任何或小或大的项目,通常用于团队开发项目过程中对源码协同编辑和管理。Git 是 Linus Torvalds 在2005年为了帮助管理 Linux 内核开发,基于C开发的一个开源版本控制软件,方便其它内核开发者提交贡献和修改。什么是版本控制系统?比如用word写论文,每次修改重新保存另一个文件,最后会出现很多版本,如果导师再修改还需要来回发送文件合并新内容,这样会很麻烦。Git可以自动记录每次文件的改动,支持对文件的协同编辑,就不需要手动管理多个“版本”。

  • 分布式控制

其它版本控制工具 CVS, Subversion 均为集中式版本控制系统,版本库是集中存放在中央服务器的,个人从服务器中取得最新版本,修改结束后推送回中央服务器,类比图书馆,集中式版本控制系统需要连接网络才能工作。分布式版本控制系统没有“中央服务器”,每个人的电脑上都是一个完整的版本库,因此也不需要连接网络,安全性也很高。目前还有很多其它的版本控制系统,比如CVS, SVN, ClearCase等,Git是最流行的。

2.安装配置

Git 目前支持 Linux/Unix、Solaris、Mac和 Windows 平台上运行,可在git-scm官网上下载。以windows系统为例,gitforwindows镜像下载,安装后包括图形界面Git GUI和Git Bash

在这里插入图片描述
在这里插入图片描述

2.1 查看配置信息

  • git config --list

配置你的服务器的信息,git是分布式版本控制系统,因此每台机器需要设置用户名和邮件,使用global表明这台机器上的所有Git仓库都使用这个配置信息,也可以对某个仓库指定不同的用户名和邮件

$ git config --global user.name 'name'
$ git config --global user.email 'email'

# 查看config
$ git config --list

3.文件管理

3.1 创建仓库

  • git init:初始化目录
  • git add:添加文件
  • git commit:提交文件

版本库也成为仓库(repository),相当于一个目录,这个目录里的所有文件都有能用Git管理,每个文件的修改历史都可以被追踪或还原。首先创建一个空目录mkdir,进入该文件cdpwd显示当前目录,通过git init将这个目录变成Git可以管理的仓库,目录下会增加一个.git目录,用于Git跟踪管理版本库。如果没看到可能是隐藏了,用ls -ah可以看见

$ mkdir Desktop/learngit
$ cd Desktop/learngit
$ pwd
/c/Users/pengy/Desktop/learngit

$ git init
Initialized empty Git repository in C:/Users/pengy/Desktop/learngit/.git/

$ ls -ah
./  ../  .git/

接着在learngit里面建立一个readme.txt文件,直接新建文件,然后通过git addgit commit将该文件提交到仓库。add告诉Git,将文件添加到仓库,可以反复使用,添加多个文件,commit将文件提交到仓库,-m是本次提交的说明。执行成功后会显示 1 file changed(一个文件被改动),2 insertions(+)(插入了两行内容)(readme.txt里的两行内容)。设置addcommit两步是因为commit可以一次性提交多个很多文件,可以多次使用add添加文件。

$ git add readme.txt
$ git commit -m 'wrote a readme file'
[master (root-commit) 643a68e] wrote a readme file
 1 file changed, 2 insertions(+)
 create mode 100644 readme.txt
go go go
run everyday

3.2 版本回退

  • git status:掌握仓库当前的状态
  • git diff:查看修改的内容
  • git log:查看从最近到最远的提交日志
  • git reset:回退到某个指定的版本
  • git reflog:查看命令历史,以便确定要回到未来的哪个版本

修改readme.txt文件的内容,改成如下内容,用git status命令查看结果

go go go
sleep everyday
$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   readme.txt

no changes added to commit (use "git add" and/or "git commit -a")

git status可以让我们时刻掌握仓库当前的状态,上面结果表明,readme.txt被修改过了,但是还没有提交修改。如果想要查看具体修改的内容,用git diff命令,可以看出将run修改为了sleep

$ git diff readme.txt
diff --git a/readme.txt b/readme.txt
index 9fbbc68..ab0fdda 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,2 +1,2 @@
 go go go
-run everyday
\ No newline at end of file
+sleep everyday
\ No newline at end of file

接着用前面提到的方法提交修改

$ git add readme.txt
$ git status
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        modified:   readme.txt
$ git commit -m 'change sleep'
[master 3149571] change sleep
 1 file changed, 1 insertion(+), 1 deletion(-)

$ git status
On branch master
nothing to commit, working tree clean

提交后显示没有需要提交的修改,工作目录working tree是干净。
按照前面的修改方法再修改文件如下

go go go
sleep everyday
young and rich
$ git add readme.txt
$ git commit -m 'append line'
[master 0efc261] append line
 1 file changed, 2 insertions(+), 1 deletion(-)

这样对文件不停的修改,每次修改提交都会保留一个当前内容,方面后续恢复,如同备份,目前readme.txt已经修改了三次

go go go
run everyday

go go go
sleep everyday

go go go
sleep everyday
young and rich

git log查看从最近到最远的提交日志

$ git log
commit 0efc2612b8fbf89a036e4358c4a0c83f9afddffc (HEAD -> master)
Author: bujibujibiu <123456@gmail.com> 
Date:   Wed May 24 14:37:07 2023 +0800

    append line

commit 3149571d74bc882218458f638eb119dae24e1a57
Author: bujibujibiu <123456@gmail.com>
Date:   Wed May 24 14:26:39 2023 +0800

    change sleep

commit 643a68e9294e906037cb37d3c120dac6f02a2127
Author: bujibujibiu <carrot12358@gmail.com>
Date:   Wed May 24 11:31:55 2023 +0800

    wrote a readme file

在图形化Git Gui中可以清楚看到提交历史
在这里插入图片描述
Git中Head表示当前版本append lineHEAD^表示上一个,HEAD~100表示上100个,用git reset回退到上一个版本change sleep,查看当前文件内容,变成了第二个版本

$ git reset --hard HEAD^
HEAD is now at 3149571 change sleep
$ cat readme.txt
go go go
sleep everyday

再次git log会发现只有两条记录

$ git log
commit 3149571d74bc882218458f638eb119dae24e1a57 (HEAD -> master)
Author: bujibujibiu <carrot12358@gmail.com>
Date:   Wed May 24 14:26:39 2023 +0800

    change sleep

commit 643a68e9294e906037cb37d3c120dac6f02a2127
Author: bujibujibiu <carrot12358@gmail.com>
Date:   Wed May 24 11:31:55 2023 +0800

    wrote a readme file

如果想要回到最新的那个版本,就找到commit id,版本号写前几位,Git会自动寻找对应的版本,可以发现又回到最新的版本

$ git reset --hard 0efc
HEAD is now at 0efc261 append line

$ cat readme.txt
go go go
sleep everyday
young and rich

为了找到版本号,可以用git reflog记录每一次的命令

$ git reflog
0efc261 (HEAD -> master) HEAD@{0}: reset: moving to 0efc
3149571 HEAD@{1}: reset: moving to HEAD^
0efc261 (HEAD -> master) HEAD@{2}: commit: append line
3149571 HEAD@{3}: commit: change sleep
643a68e HEAD@{4}: commit (initial): wrote a readme file

3.3 工作流程

  • 工作区—暂存区—版本库分支

在前文中提到过提交修改文件需要通过add和commit两步,流程如下,工作区是电脑里能看到的目录,版本库(Repository)是文件夹里的隐藏目录.git,不算工作区,Git版本库中包含一个暂存区(index/stage),还有Git自动创建的第一个分支master,以及指向master的一个指针叫HEADgit add将文件修改添加到暂存区,git commit把暂存区的所有内容提交到当前分支master
在这里插入图片描述
比如在readme.txt里增加一行内容,同时新建文件LICENSE.txt,git status表明修改了一个文件,新增了一个文件为Untracked files。然后git add这两个文件,LICENSE.txt和readme.txt被放到了暂存区,git commit将两个文件提交到master分支

$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   readme.txt

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        LICENSE.txt

no changes added to commit (use "git add" and/or "git commit -a")
$ git add readme.txt
$ git add LICENSE.txt
$ git status
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        new file:   LICENSE.txt
        modified:   readme.txt
$ git commit -m 'stage works'
[master 2312846] stage works
 2 files changed, 2 insertions(+), 1 deletion(-)
 create mode 100644 LICENSE.txt
$ git status
On branch master
nothing to commit, working tree clean

Git管理的是每一次修改,比如按照下面操作:修改readme.txt—add—修改readme.txt—commit—status,commit提交的只是第一次修改的内容,add将第一次修改放在暂存区,可见Git管理的是每一次修改,而不是文件本身。

# (1)修改readme.txt,新增track changes
$ cat readme.txt
go go go
sleep everyday
young and rich
crzay life
track changes

# (2)readme.txt存放在暂存区
$ git add readme.txt

# (3)再次修改readme.txt,变成track changes second
$ cat readme.txt
go go go
sleep everyday
young and rich
crzay life
track changes second

# (4)提交暂存区里的readme.txt
$ git commit -m 'track changes'
[master bd56840] track changes
 1 file changed, 2 insertions(+), 1 deletion(-)
 
# (5)显示当前状态,第二次修改的readme.txt没有被提交
$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   readme.txt

no changes added to commit (use "git add" and/or "git commit -a")

git diff HEAD -- readme.txt可以看到工作区和版本库里的readme.txt区别

$ git diff HEAD -- readme.txt
diff --git a/readme.txt b/readme.txt
index a8981d7..a7d5c05 100644
--- a/readme.txt
+++ b/readme.txt
@@ -2,4 +2,4 @@ go go go
 sleep everyday
 young and rich
 crzay life
-track changes
\ No newline at end of file
+track changes second
\ No newline at end of file

3.4 撤销修改

  • git checkout -- file:撤销file工作区的修改
  • git reset HEAD file:撤销暂存区的修改

如果要撤销对工作区的修改,使用git checkout -- file

# (1)readme.txt文件新增stupid day
$ cat readme.txt
go go go
sleep everyday
young and rich
crzay life
track changes second
no hope
stupid day

# (2)删除工作区的修改
$ git checkout -- readme.txt

#(3)stupid day已经删除
$ cat readme.txt
go go go
sleep everyday
young and rich
crzay life
track changes second
no hope

如果已经add到暂存区,使用git reset命令把暂存区的修改回退到工作区,再用checkout丢弃工作区的修改

# (1)修改readme.txt新增stupid day
$ cat readme.txt
go go go
sleep everyday
young and rich
crzay life
track changes second
no hope
stupid day

# (2)add到暂存区,状态为待提交
$ git add readme.txt
$ git status
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        modified:   readme.txt

# (3)把暂存区的修改回退到工作区,状态为待add
$ git reset HEAD readme.txt
Unstaged changes after reset:
M       readme.txt

$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   readme.txt

no changes added to commit (use "git add" and/or "git commit -a")

# (4)checkout撤销工作区的修改
$ git checkout -- readme.txt

$ cat readme.txt
go go go
sleep everyday
young and rich
crzay life
track changes second
no hope

已经提交了不合适的修改到版本库时,想要撤销本次提交,可使用前面的版本回退,不过前提是没有推送到远程库

3.5 删除文件

  • git rm:删除文件
  • git checkout -- file:恢复工作区file文件

假设新增一个文件并提交到了版本库,现在需要删除这个文件,首先用rm删除工作区中的文件,然后用使用git rm删除版本库中文件

# (1)新增文件test.txt,并add和commit到版本库
$ git add test.txt
$ git commit -m 'add test.txt'
[master 33f52c0] add test.txt
 1 file changed, 1 insertion(+)
 create mode 100644 test.txt

# (2)使用rm命令直接删除工作区的test.txt
$ rm test.txt
$ git status
On branch master
Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        deleted:    test.txt

no changes added to commit (use "git add" and/or "git commit -a")

# (3)使用git rm删除版本库中的test.txt并commit
$ git rm test.txt
rm 'test.txt'
$ git commit -m 'delete test.txt'
[master 2e755a3] delete test.txt
 1 file changed, 1 deletion(-)
 delete mode 100644 test.txt

如果用rm删除了工作区中的某个文件,但是发现删错了,可以通过checkout用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”

# (1)新增文件test.txt,并add和commit到版本库
$ git add test.txt
$ git commit -m 'add test new'
[master 943447f] add test new
 1 file changed, 1 insertion(+)
 create mode 100644 test.txt

# (2)使用rm命令直接删除工作区的test.txt
$ cat test.txt
for test
$ rm test.txt
$ cat test.txt
cat: test.txt: No such file or directory

# (3)checkout 恢复工作区的文件
$ git checkout -- test.txt
$ cat test.txt
for test

4.远程仓库

4.1 连接远程库

Git是一种分布式版本控制工具,用于管理多版本项目。Github和Gitlab都是基于git的代码托管平台,Github一般用于托管开源项目,GitLab比较私密,适合企业。本地仓库可以和远程仓库之间传输需要SSH加密。以github为例。首先在本地Git配置config信息,在Github上用该邮件注册账号。

$ git config --global user.name 'name'
$ git config --global user.email 'email'

先通过cd ~/.ssh查看是否已经配置SSH,如果没有任何文件,则输入一下内容配置SSH,一直回车,密码可以不设置

$ ssh-keygen -t -rsa -C 'HAPPY@HAPPY.com'
Generating public/private rsa key pair.

重新打开.ssh目录,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以公开,将id_rsa.pub内容复制到Github的SSH key设置中

$ cd ~/.ssh
$ ls
id_rsa  id_rsa.pub
$ cat id_rsa.pub

判断是否连接成功,输入下面语句显示You’ve successfully authenticated, but GitHub does not provide shell access

$ ssh git@github.com

4.2 本地上传至远程

  • git remote add origin *********.git:连接远程仓库
  • git push:将本地分支的内容推送到远程库
  • git remote -v:查看远程仓库信息
  • git remote rm <name>:删除远程仓库

如果通过前面的3.1创建本地仓库后,想要在GIthub或者Gitlab中也创建一个Git仓库,并且两个仓库远程同步,首先在GIthub中Create repository创建一个空的Git仓库,然后,把本地仓库的内容推送到GitHub仓库,在本地的仓库下运行命令

$ git remote add origin *********.git

*********就是你的远程仓库地址,添加后,远程库的名字就是origin,这是Git默认的叫法。用git remote -v可以查看远程库信息

pengy@LAPTOP-7A77J86V MINGW32 ~/Desktop/CPCS (master)
$ git remote -v
origin  https://github.com/bujibujibiu/learngit.git (fetch)
origin  https://github.com/bujibujibiu/learngit.git (push)

如果添加的时候地址写错了,或者就是想删除远程库,可以用git remote rm <name>命令

$ git remote rm origin

把本地库的所有内容推送到远程库上用git push,这样matser分支的内容就推送到Github中,以后每次修改都可以通过这个命令更新远程仓库

$ git push origin master

如果是远程库和本地库都初始化了,现在需要同步,那么首先要将远程库pull到本地,然后push。

$ git pull origin master

出现fatal: refusing to merge unrelated histories错误就用下面方法强制合并

pengy@LAPTOP-7A77J86V MINGW32 ~/Desktop/learngit(master)
$ git pull origin master --allow-unrelated-histories
From https://github.com/bujibujibiu/learngit
 * branch            master     -> FETCH_HEAD
Merge made by the 'ort' strategy.
 README.md | 3 +++
 1 file changed, 3 insertions(+)
 create mode 100644 README.md
pengy@LAPTOP-7A77J86V MINGW32 ~/Desktop/learngit(master)
$ git push origin master
Enumerating objects: 9, done.
Counting objects: 100% (9/9), done.
Delta compression using up to 12 threads
Compressing objects: 100% (7/7), done.
Writing objects: 100% (8/8), 95.42 KiB | 13.63 MiB/s, done.
Total 8 (delta 1), reused 0 (delta 0), pack-reused 0
To https://github.com/bujibujibiu/learngit.git
   7ec29b2..fb58fc0  master -> master

4.3 从远程库克隆到本地

  • git clone *****:克隆远程库至本地文件

4.2是先有本地仓库,后有远程仓库,如何关联远程库,假设现在先有远程仓,需要克隆到本地。比如首先创建Github仓库,勾选Initialize this repository with a README,这样GitHub会自动为创建一个README.md文件。下一步是用命令git clone克隆一个本地库。

$ git clone https://github.com/bujibujibiu/learngit.git

这样本地就会出现一个learngit的库,并且有README.md文件

5.分支管理

5.1 创建分支

  • git branch:查看分支
  • git branch name:新建分支
  • git checkout (branchname):切换分支命令
  • git checkout -b (branchname) :创建新分支并立即切换到该分支

Git管理修改是将这些提交串成时间线,也就是一个分支,在Git初始化时自动创建了一个分支master,当前版本HEAD指向mastermaster指向最新的提交点。每次提交,master分支都会向前移动一步,随着不断提交,master分支的线也越来越长。如果创建新的分支比如dev,指向master相同的提交,再把HEAD指向dev,就表示当前分支在dev上。从现在开始,对工作区的修改和提交就是针对dev分支了,比如新提交一次后,dev指针往前移动一步,而master指针不变。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如下:创建文件夹learngit,通过3.1的操作新建仓库并添加readme.txt文件

$ cd learngit
$ git init
Initialized empty Git repository in C:/Users/pengy/Desktop/learngit/.git/

$ git status
On branch master

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        readme.txt

nothing added to commit but untracked files present (use "git add" to track)

$ git add .

$ git commit -m 'create readme file'
[master (root-commit) dd8bad0] create readme file
 1 file changed, 6 insertions(+)
 create mode 100644 readme.txt
 
$ git status
On branch master
nothing to commit, working tree clean

$ git branch
* master

然后新建分支test,切换到test分支

~/Desktop/learngit (master)
$ git branch test

~/Desktop/learngit (master)
$ git branch
* master
  test

~/Desktop/learngit (master)
$ git checkot test
git: 'checkot' is not a git command. See 'git --help'.

The most similar command is
        checkout

~/Desktop/learngit (master)
$ git checkout test
Switched to branch 'test'

test分支下新增文件夹test.txt,ls发现在test分支下有两个文件readme.txt和test.txt,再切回到master分支,只剩下readme.txt文件

~/Desktop/learngit (test)
$ ls
readme.txt

~/Desktop/learngit (test)
$ echo 'runoob.com' > test.txt

~/Desktop/learngit (test)
$ ls
readme.txt  test.txt

~/Desktop/learngit (test)
$ git add .
warning: in the working copy of 'test.txt', LF will be replaced by CRLF the next time Git touches it

~/Desktop/learngit (test)
$ git commit -m 'add test file'
[test d20d68d] add test file
 1 file changed, 1 insertion(+)
 create mode 100644 test.txt

~/Desktop/learngit (test)
$ ls
readme.txt  test.txt

~/Desktop/learngit (test)
$ git checkout master
Switched to branch 'master'

~/Desktop/learngit (master)
$ ls
readme.txt

使用git checkout -b (branchname) 新建分支newtest并切换到该分支,文件和master一样

~/Desktop/learngit (master)
$ git checkout -b newtest
Switched to a new branch 'newtest'

~/Desktop/learngit (newtest)
$ ls
readme.txt

5.2 删除分支

  • git branch -d (branchname):删除分支

使用git branch -d (branchname)删除前面新建的newtest分支,注意要切换到别的分支,不能删除当前所在分支

~/Desktop/learngit (newtest)
$ git branch
  master
* newtest
  test

~/Desktop/learngit (newtest)
$ git branch -d newtest
error: Cannot delete branch 'newtest' checked out at 'C:/Users/pengy/Desktop/learngit'

~/Desktop/learngit (newtest)
$ git checkout master
Switched to branch 'master'

~/Desktop/learngit (master)
$ git branch -d newtest
Deleted branch newtest (was dd8bad0).

~/Desktop/learngit (master)
$ git branch
 * master
  test

5.3 合并分支+解决冲突

  • git merge (branchname):将任何分支合并到当前分支中(可以不是主分支)

master分支中新建文件runoob.php,并且commit,这样master分支中有两个文件readme.txt和runoob.php,test分支中有两个文件readme.txt和test.txt

~/Desktop/learngit (master)
$ git branch
* master
  test

~/Desktop/learngit (master)
$ touch runoob.php

~/Desktop/learngit (master)
$ git add .

~/Desktop/learngit (master)
$ git commit -m 'add runoob file'
[master 3dcca8c] add runoob file
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 runoob.php
 
~/Desktop/learngit (master)
$ ls
readme.txt  runoob.php

~/Desktop/learngit (master)
$ git checkout test
Switched to branch 'test'

~/Desktop/learngit (test)
$ ls
readme.txt  test.txt

合并test分支到master分支中,假设两个分支下都有test.txt文件且不一样,合并会产生冲突

pengy@LAPTOP-7A77J86V MINGW32 ~/Desktop/learngit (test)
$ cat test.txt
runoob.com
study
new
amazing
HAPPY

pengy@LAPTOP-7A77J86V MINGW32 ~/Desktop/learngit (master)
$ cat test.txt
runoob.com
study
new
new again

pengy@LAPTOP-7A77J86V MINGW32 ~/Desktop/learngit (master)
$ git merge test
Auto-merging test.txt
CONFLICT (content): Merge conflict in test.txt
Automatic merge failed; fix conflicts and then commit the result.

打开test.txt会看到冲突内容

pengy@LAPTOP-7A77J86V MINGW32 ~/Desktop/learngit (master|MERGING)
$ cat test.txt
runoob.com
study
new
<<<<<<< HEAD
new again
=======
amazing
HAPPY
>>>>>>> test

Git通常会在进行合并操作时生成MERGE_MSG交换文件,以保存合并消息的内容。如果Git在工作目录下找到了这个交换文件,说明上一次的合并操作没有成功完成,编辑器的进程可能意外终止。输入rm .git/.MERGE_MSG.swp

根据提示修改master分支下的test.txt文件,重新commit后显示[master 2bf0895]表示成功

$ git status
On branch master
You have unmerged paths.
  (fix conflicts and run "git commit")
  (use "git merge --abort" to abort the merge)

Unmerged paths:
  (use "git add <file>..." to mark resolution)
        both modified:   test.txt

no changes added to commit (use "git add" and/or "git commit -a")

pengy@LAPTOP-7A77J86V MINGW32 ~/Desktop/learngit (master|MERGING)
$ git add .

pengy@LAPTOP-7A77J86V MINGW32 ~/Desktop/learngit (master|MERGING)
$ git commit -m 'merge change'
[master 2bf0895] merge change

pengy@LAPTOP-7A77J86V MINGW32 ~/Desktop/learngit (master)
$ git status
On branch master
nothing to commit, working tree clean

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

python与深度学习(十五):CNN和宝可梦模型

目录 1. 说明2. 宝可梦模型2.1 导入相关库2.2 建立模型2.3 模型编译2.4 数据生成器2.5 模型训练2.6 模型保存 3. 宝可梦的CNN模型可视化结果图4. 完整代码5. 宝可梦的迁移学习 1. 说明 本篇文章是CNN的另外一个例子&#xff0c;宝可梦模型&#xff0c;是自制数据集的例子。之前…

b站视频标题的获取(xpath、jsonpath的一个简单应用)

目录 1.目的2.代码的演示 注&#xff1a;该篇文章为本人原创&#xff0c;由于本人学习有限&#xff0c;若有错误或者笔误或者有问题&#xff0c;欢迎大家进行批评指正&#xff0c;谢谢。 1.目的 在b站大学上&#xff0c;为了更好的写笔记&#xff0c;本人根据学到的Python(即Py…

element vue2 动态添加 select+tree

难点在 1 添加一组一组的渲染 是往数组里push对象 循环的&#xff1b;但是要注意对象的结构! 因为这涉及到编辑完成后&#xff0c;表单提交时候的 校验&#xff01; 是校验每一个select tree里边 是否勾选 2 是在后期做编辑回显的时候 保证后端返回的值 是渲染到 select中的tr…

C语言案例 按序输出多个整数-03

难度2复杂度3 题目&#xff1a;输入多个整数&#xff0c;按从小到大的顺序输出 步骤一&#xff1a;定义程序的目标 编写一个C程序&#xff0c;随机输入整数&#xff0c;按照从小到大的顺序输出 步骤二&#xff1a;程序设计 整个C程序由三大模块组成&#xff0c;第一个模块使…

实战项目——多功能电子时钟

一&#xff0c;项目要求 二&#xff0c;理论原理 通过按键来控制状态机的状态&#xff0c;在将状态值传送到各个模块进行驱动&#xff0c;在空闲状态下&#xff0c;数码管显示基础时钟&#xff0c;基础时钟是由7个计数器组合而成&#xff0c;当在ADJUST状态下可以调整时间&…

AlexNet卷积神经网络-笔记

AlexNet卷积神经网络-笔记 AlexNet卷积神经网络2012年提出 测试结果为&#xff1a; 通过运行结果可以发现&#xff0c; 在眼疾筛查数据集iChallenge-PM上使用AlexNet&#xff0c;loss能有效下降&#xff0c; 经过5个epoch的训练&#xff0c;在验证集上的准确率可以达到94%左右…

电源控制--品质因素Q值全解

什么是品质因素Q值&#xff1f; 在电源控制中&#xff0c;品质因素 Q 值通常用于描述电源滤波器的性能。电源滤波器用于减小电源中的噪声和干扰&#xff0c;以提供干净稳定的电源供应给电子设备。 品质因素 Q 值在电源滤波器中表示滤波器的带宽和中心频率之比&#xff0c;用于…

SpringBoot集成百度人脸识别实现登陆注册功能Demo(二)

前言 上一篇SpringBoot集成百度人脸demo中我使用的是调用本机摄像头完成人脸注册&#xff0c;本次demo根据业务需求的不同我采用文件上传的方式实现人脸注册。 效果演示 注册 后端响应数据&#xff1a; 登录 后端响应数据&#xff1a; 项目结构 后端代码实现 1、BaiduAiUtil…

【C++学习】STL容器——list

目录 一、list的介绍及使用 1.1 list的介绍 1.2 list的使用 1.2.1 list的构造 1.2.2 list iterator的使用 1.2.3 list capacity 1.2.4 list element access 1.2.5 list modifiers 1.2.6 list 迭代器失效 二、list的模拟实现 2.1 模拟实现list 三、list和vector的对比…

8月1日上课内容 第一章web基础与http协议

dns与域名 网络是基于tcp/ip协议进行通信和连接的 应用层--传输层---网络层----数据链路层-----物理层 ip地址&#xff0c;我们每一台主机都有一个唯一的地址标识(固定的ip地址)&#xff0c;区分用户和计算机通信。 ip地址:32位二进制数组成的&#xff0c;不方便记忆 192.168.…

SpringMVC -- REST风格开发,RESTful快速开发、RESTful注解开发

&#x1f40c;个人主页&#xff1a; &#x1f40c; 叶落闲庭 &#x1f4a8;我的专栏&#xff1a;&#x1f4a8; c语言 数据结构 javaweb 石可破也&#xff0c;而不可夺坚&#xff1b;丹可磨也&#xff0c;而不可夺赤。 REST 一、REST简介1.1REST风格简介 二、RESTful入门案例2.…

绘制曲线python

文章目录 import matplotlib.pyplot as plt# 提供的数据 x= [1,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,2,2.1,2.2,2.3,2.4,2.5,2.6,2.7,2.8,2.9,3,3.1,3.2,3.3,3.4,3.5,3.6,3.7,3.8,3.9,4,4.1,4.2,4.3,4.4,4.5,4.6,4.7,4.8,4.9,5,5.1,5.2,5.3,5.4,5.5,5.6,5.7,5.8,5.9,6,6.1,6.2…

门面模式(C++)

定义 为子系统中的一组接口提供一个一致(稳定) 的界面&#xff0c;Facade模式定义了一个高层接口&#xff0c;这个接口使得这一子系统更加容易使用(复用)。 应用场景 上述A方案的问题在于组件的客户和组件中各种复杂的子系统有了过多的耦合&#xff0c;随着外部客户程序和各子…

代码随想录算法训练营day55

文章目录 Day55 判断子序列题目思路代码 不同的子序列题目思路代码 Day55 判断子序列 392. 判断子序列 - 力扣&#xff08;LeetCode&#xff09; 题目 给定字符串 s 和 t &#xff0c;判断 s 是否为 t 的子序列。 字符串的一个子序列是原始字符串删除一些&#xff08;也可以…

java文件

一.File类 二.扫描指定目录&#xff0c;并找到名称中包含指定字符的所有普通文件&#xff08;不包含目录&#xff09;&#xff0c;并且后续询问用户是否要删除该文件 我的代码: import java.io.File; import java.io.IOException; import java.util.Scanner;public class Tes…

Excel功能总结

1&#xff09;每一张表格上都打印表头 “页面布局”-->“打印标题”-->页面设置“工作表”页-->打印标题“顶端标题行” 如&#xff1a;固定第1~2行&#xff0c;设置成“$1:$2” 2&#xff09;将页面内容打印在一页【缩印】 1.选好需要打印的区域&#xff0c;“页面布…

数据结构 | 利用二叉堆实现优先级队列

目录 一、二叉堆的操作 二、二叉堆的实现 2.1 结构属性 2.2 堆的有序性 2.3 堆操作 队列有一个重要的变体&#xff0c;叫作优先级队列。和队列一样&#xff0c;优先级队列从头部移除元素&#xff0c;不过元素的逻辑顺序是由优先级决定的。优先级最高的元素在最前&#xff…

全志D1-H (MQ-Pro)驱动 OV5640 摄像头

内核配置 运行 m kernel_menuconfig 勾选下列驱动 Device Drivers ---><*> Multimedia support --->[*] V4L platform devices ---><*> Video Multiplexer[*] SUNXI platform devices ---><*> sunxi video input (camera csi/mipi…

C++11 新特性 ---- 模板的优化

C11 模板机制:① 函数模板② 类模板模板的使用&#xff1a;① 范围&#xff1a;模板的声明或定义只能在全局或类范围进行&#xff0c;不可以在局部范围&#xff08;如函数&#xff09;② 目的&#xff1a;为了能够编写与类型无关的代码函数模板&#xff1a;- 格式&#xff1a;t…