Git总结超全版
最近想系统的回顾一下Git的使用,如果只想快速的集成git到idea,可以参考另一篇我的博客中的git部分
目录
- 版本管理工具简介
- Git安装与配置
- Git远程仓库配置
- Git常用命令
- 为常用命令配置别名(可选)
- Git忽略文件.gitignore
- 一些概念
- *本地仓库操作
- 删除仓库内容
- *远程仓库操作
- *分支操作
- 分支及合并的冲突问题
- 开发中分支使用原则与流程
- 标签操作
- 在IDEA中使用Git
- IDEA中配置Git
- 获取Git仓库
- 本地仓库操作
- 远程仓库操作
- 分支操作
版本管理工具简介
现在比较流行的版本管理工具是git ,但是实际上git 是近几年才发展起来的,可能有一些老的项目,还在用一些老的软件,比如svn。版本管理工具一般具有如下特性:
1) 能够记录历史版本,回退历史版本
2) 团队开发,方便代码合并
SVN(SubVersion)
SVN是集中式版本控制系统,版本库是集中放在中央服务器的.工作流程如下:
1.从中央服务器远程仓库下载代码
2.修改后将代码提交到中央服务器远程仓库
优点: 简单,易操作
缺点:所有代码必须放在中央服务器
1.服务器一旦宕机无法提交代码,即容错性较差
2.离线无法提交代码,无法及时记录我们的提交行为
Git
Git是分布式版本控制系统(Distributed Version Control System,简称 DVCS),分为两种类型的仓库:本地仓库和远程仓库
命令如下:
- clone(克隆): 从远程仓库中克隆代码到本地仓库
- checkout (检出):从本地仓库中检出一个仓库分支然后进行修订
- add(添加): 在提交前先将代码提交到暂存区
- commit(提交): 提交到本地仓库。本地仓库中保存修改的各个历史版本
- fetch (抓取) : 从远程库,抓取到本地仓库,不进行任何的合并动作,一般操作比较少。
- pull (拉取) : 从远程库拉到本地库,自动进行合并(merge),然后放到到工作区,相当于
fetch+merge - push(推送) : 修改完成后,需要和团队成员共享代码时,将代码推送到远程仓库
git和svn的区别
svn 是集中式版本控制工具,git 是分布式版本控制工具
svn 不支持离线提交,git有本地仓库,支持离线提交代码
Git安装与配置
下载地址
- 按照附件的 顺序直接下一步傻瓜式安装即可
- 其中安装的过程中需要填写一个邮箱和用户名(任意即可)
- 注意: 安装完毕请重启资源管理器,或者重启电脑 cmd里输入git --version即可查看版本
- 可视化客户端有很多比如上面的TortoiseGit,还有GitHub Desktop等,本教程不介绍,只介绍Git Bash与结合IDEA的使用
Git GuI:Git提供的图形界面工具
Git Bash: Git提供的命令行工具
当安装Git后首先要做的事情是设置用户名称和email地址,是非常重要的, 每次Git提交都会使用该用户信息
在电脑桌面任意位置右击(win11 shift+右击),点击“Git Bash Here”以打开Git命令行窗口,这里相当于一个小的linux窗口,学习linux命令也可以在这里学
#设置用户信息 git config --global user.name "用户名"git config --global user.email "邮箱地址"
#查看配置信息git config --listgit config user.name
#通过上面的命令设置的信息会保存在用户C:\Users\用户\.gitconfig文件中
解决GitBash乱码问题
可配可不配
1.打开GitBash执行下面命令
git config --global core.quotepath false
2.${git_home}/etc/bash.bashrc 文件最后加入下面两行
export LANG="zh_CN.UTF-8"
export LC_ALL="zh_CN.UTF-8"
Git远程仓库配置
如何搭建Git远程仓库呢?我们可以借助互联网上提供的一些代码托管服务来实现,其中比较常用的有GitHub、码云、GitLab等。
gitHub是一个面向开源及私有软件项目的托管平台,因为只支持Git 作为唯一的版本库格式进行托管,故名gitHub
码云gitee是国内的一个代码托管平台,由于服务器在国内,所以相比于GitHub,码云速度会更快
GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务,一般用于在企业、学校等内部网络搭建git私服。
配置ssh协议
使用它们需要配置 ssh keys。需要识别出你推送的提交确实是你推送的,而不是别人冒充的,而Git支持SSH协议,所以,GitLab只要知道了你的公钥,就可以确认只有你自己才能推送。当然,Github、Gitee或GitLab允许你添加多个Key。假定你有若干电脑,你一会儿在公司提交,一会儿在家里提交,只要把每台电脑的Key都添加到GitLab,就可以在每台电脑上往GitLab推送了。
在git bash生成SSH公钥命令ssh-keygen -t rsa
,命令执行后,连敲3次回车键,如果公钥已经存在,则自动覆盖。执行完后到系统盘users目录(win: C:\Users\用户\你的用户名.ssh),查看生成的ssh文件。
登陆Github、Gitee或GitLab,打开“settings”,“SSH Keys”页面,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容,将公钥( id_rsa.pub),添加到Github、Gitee或GitLab平台中即可。
测试配置是否成功,如在Git Bash中输入ssh -T git@github.com
或ssh -T git@gitee.com
当你第一次使用Git的命令连接GitHub时,会得到一个警告,这是因为Git使用SSH连接,而SSH连接在第一次验证GitHub服务器的Key时,需要你确认GitHub的Key的指纹信息是否真的来自GitHub的服务器,输入yes回车即可。Git会输出一个警告,告诉你已经把GitHub的Key添加到本机的一个信任列表里了。
配置http/https协议
一般推荐使用ssh协议,因为SSH 使用公钥加密,不需要频繁输入用户名和密码,避免了凭据泄露风险。配置好 SSH 密钥后,后续操作无需重复输入凭据。在脚本和 CI/CD 环境中,SSH 更易于无交互地操作。
使用 HTTP/HTTPS URL 来克隆仓库。例如:git clone https://github.com/username/repo.git
这些命令后面都会介绍
如果你已经克隆了一个仓库,并想更改其远程 URL 为 HTTPS,可以使用以下命令: git remote set-url origin https://github.com/username/repo.git
需要修改“.git/config”文件内容,注意这是当前项目中的配置文件,不是用户目录下的
例如:
虽然直接在 .git/config 文件中包含用户名和密码可以避免重复输入密码,但出于安全考虑,不推荐这种做法。
可以使用 Git Credential Manager 来安全地存储和管理凭据。也可以使用环境变量:将用户名和密码存储在环境变量中,并在需要时读取。例如,编写脚本来设置远程 URL。
Git常用命令
为常用命令配置别名(可选)
有些常用的指令参数非常多,每次都要输入好多参数,我们可以使用别名。
1.打开用户目录,创建.bashrc文件 部分windows系统不允许用户创建点号开头的文件,可以打开gitBash,执行touch ~/.bashrc ~就表示用户目录和linux一样
2.在.bashrc文件中输入如下内容:
#用于输出git提交日志
alias git-log='git log --pretty=oneline --all --graph --abbrev-commit'
#用于输出当前目录所有文件及基本信息(包括隐藏文件)
alias ll='ls -al'
3.打开gitBash,执行source ~/.bashrc 即可使用了 在当前用户的git环境中都有效
Git忽略文件.gitignore
一般我们总会有些文件无需纳入Git 的管理,也不希望它们总出现在未跟踪文件列表。 通常都是些自动生成的文件,比如日志文件,或者编译过程中创建的临时文件等。例如Java项目中编译的.class文件、开发工具自带的配置文件等。在这种情况下,我们可以在工作目录中创建一个名为 .gitignore 的文件(文件名称固定),列出要忽略的文件模式。
注意:该文件因为没有文件名,没办法直接在windows目录下直接创建,可以通过命令行Git Bash来touch创建。
常见规则写法有如下几种:
1)/mtk/ 过滤整个文件夹
2)*.zip 过滤所有.zip文件
3)/mtk/do.c 过滤某个具体文件
4) !index.php 不过滤具体某个文件
在文件中,以#开头的都是注释。
下面是一个示例:
.git
logs
rebel.xml
target/
!.mvn/wrapper/maven-wrapper.jar
log.path_IS_UNDEFINED
.DS_Store
offline_user.md
*.class### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
一些概念
Git本地操作的三个区域:
工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。Git的版本库里存了很多配置信息、日志信息和文件版本信息等,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
Git工作区中的文件存在两种状态:untracked 未跟踪(未被纳入版本控制)、tracked 已跟踪(被纳入版本控制),其中已跟踪分为以下三种
1)Unmodified 未修改状态
2)Modified 已修改状态
3)Staged 已暂存状态
*本地仓库操作
裸仓库 (git init --bare):没有工作区,主要用于远程共享和协作。
非裸仓库 (git init):包含工作区,适合本地开发和版本控制操作。
如果你需要一个中央仓库来共享代码库,使用裸仓库;如果你需要一个本地开发环境,使用非裸仓库
mkdir创建仓库,并初始化(让Git知道,它需要来管理这个目录),指令:git init
初始化仓库不带工作区:git init --bare
执行之后会在项目目录下创建“.git”的隐藏目录,这个目录是Git所创建的,不能删除,也不能随意更改其中的内容。
也可以从远程仓库克隆,命令格式:git clone 远程仓库地址
常用命令总结:
创建一个文件到工作区 touch 文件名
查看当前状态:git status
红色:表示文件状态不在暂存区和本地仓库
绿色:表示文件状态在暂存区但不在本地仓库
nothing:表示工作区和本地仓库同步
添加到暂存区(缓存区):git add 文件名
也可以同时添加多个文件:git add 文件名1 文件名2 文件名3 …
也可以添加所有新文件到暂存区git add -A
或git add .
git add . 不处理被删除的文件,而 git add -A 会将被删除的文件从暂存区中移除。
git add . 只会处理当前目录下的文件,而 git add -A 会递归地处理所有目录下的文件
一般来说,如果你想要确保所有修改、新建和删除的文件都被正确添加到暂存区,推荐使用 git add -A 命令。
把暂存区的文件提交至版本库:git commit -m "注释内容"
查看工作区的文件状态 (list) ls
查看暂存区的状态git ls-files
清空命令窗口clear:
或ctrl+l
每次提交都会产生一个版本号,提交时设置的message、提交人、邮箱、提交时间等信息都会记录到日志中
查看提交日志(log) git log [option]
行数太多时键入q退出查看
options
–all 显示所有分支
–pretty=oneline 将提交信息显示为一行
–abbrev-commit 使得输出的commitId更简短
–graph 以图的形式显示
在上面配置的别名git-log 就包含了这些参数,所以后续可以直接使用指令git-log
版本回退or切换 git reset
将暂存区的文件取消暂存或者是切换到指定版本
取消暂存命令格式:git reset 文件名
切换到指定版本命令格式:git reset --hard 版本号
git reset --hard HEAD^
上一个版本就是HEAD^
,上上一个版本就是HEAD^^
进行版本回退时,不需要使用完整的哈希字符串,前七位即可
每次Git提交都会产生新的版本号,可以使用git log 指令查看,通过版本号就可以回到历史版本
回退到了某个版本,关掉了电脑,第二天早上就后悔了,想恢复到新版本怎么办?找不到新版本的commit id怎么办?
git reflog
这个指令可以看到已经删除的提交记录,查看所有的操作记录以便确定要回到未来的哪个版本
删除仓库内容
Git跟踪并管理的是修改,而非文件。
你会问,什么是修改?比如你新增了一行,这就是一个修改,删除了一行,也是一个修改,更改了某些字符,也是一个修改,删了一些又加了一些,也是一个修改,甚至创建一个新文件,也算一个修改。比如我们在当前工作区中修改readme的内容,此时git status就会提醒修改:
一般情况下,你通常直接在文件管理器中把没用的文件删了,或者用rm命令删了:rm readme.txt
这个时候,Git知道你删除了文件,因此,工作区和版本库就不一致了,git status命令会立刻告诉你哪些文件被删除了:
现在你有两个选择,一是确实要从版本库中删除该文件,那就用命令git rm
删掉,并且git commit
提交
另一种情况是删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本:git checkout -- 文件名
git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。注意:从来没有被添加到版本库就被删除的文件,是无法恢复的!
git checkout不仅用于还原文件,还可以用于切换分支,例如,要切换到名为 feature 的分支:
git checkout feature
也可以使用 git checkout 来创建新分支并立即切换到该分支git checkout -b new-feature
可以使用 git checkout 切换到某个特定的提交(commit)。这使你处于“分离头指针”状态,不属于任何分支,而是处于特定提交的状态。例如,要切换到某个提交的哈希值为 abcdef 的状态git checkout abcdef
如果你只想在当前工作目录中恢复特定文件或目录到某个特定分支的状态,也可以使用它,比如将 <file> 恢复到 <branch> 分支的状态git checkout <branch> -- <file>
*远程仓库操作
前面执行的命令操作都是针对的本地仓库,本节我们会学习关于远程仓库的一些操作,该节会涉及到一些分支操作,需要结合下一章看,具体命令包括
-
git remote 查看远程仓库
-
git remote add 添加远程仓库
-
git clone 从远程仓库克隆
-
git pull 从远程仓库拉取
-
git push 推送到远程仓库
如果要查看已经配置的远程仓库服务器,可以执行 git remote
命令,它会列出每一个远程服务器的简称。
如果已经克隆了远程仓库,那么至少应该能看到 origin ,这是 Git 克隆的仓库服务器的默认名字。
可以通过-v参数查看远程仓库更加详细的信息。本地仓库配置的远程仓库都需要一个简称,后续在和远程仓库交互时会使用到这个简称
添加远程仓库命令格式:git remote add 简称 远程仓库地址
注意:一个本地仓库可以关联多个远程仓库
如果你想获得一份已经存在了的 Git 远程仓库的拷贝,这时就要用到 git clone 命令。 Git 克隆的是该 Git 仓库服务器上的几乎所有数据(包括日志信息、历史记录等)。
克隆仓库的命令格式: git clone 远程仓库地址 [本地目录]
本地目录可以省略,会自动生成一个目录
将本地仓库当前分支的内容推送到远程仓库的对应分支,命令格式:git push 远程仓库简称 远程仓库分支名称
git push origin feature:feature
将把本地的 feature 分支推送到远程仓库的 origin 中的 feature 分支 默认推送的是当前切换到的本地仓库分支 查看分支关联关系我们可以分支章节介绍的git branch -vv
命令
git push -u origin feature
用 -u 参数(–set-upstream的简写)以后再次推送时,Git会记住你推送到的远程分支,允许你只需键入 git push 而不必每次都指定远程分支
-f
参数表示强制覆盖
一个仓库可以有多个分支,默认情况下在创建仓库后会自动创建一个master分支,后面会讲解分支相关的操作
在使用git push命令将本地文件推送至码云远程仓库时,如果是第一次操作,需要进行身份认证,认证通过才可以推送,如下:
注意:上面的用户名和密码对应的就是我们在码云上注册的用户名和密码,认证通过后会将用户名和密码保存到windows系统中(如下图),后续再推送则无需重复输入用户名和密码。
推送完成后可以到远程仓库中查看文件的变化。
从远程仓库获取最新版本并合并到本地仓库,命令格式:git pull 远程仓库简称 分支名称
拉取指令就是将远端仓库的修改拉到本地并自动进行合并 即pull = fetch+merge 其中 merge是分支合并操作 分支章节会介绍
git fetch [remote name] [branch name]
抓取指令就是将仓库里的更新都抓取到本地,不会进行合并,如果不指定远端名称和分支名,则抓取所有分支
注意:如果当前本地仓库不是从远程仓库克隆,而是本地创建的仓库,并且仓库中存在文件,此时再从远程仓库拉取文件的时候会报错(fatal: refusing to merge unrelated histories )
解决此问题可以在git pull命令后加入参数–allow-unrelated-histories
*分支操作
使用分支意味着你可以把你的工作从开发主线上分离开来来进行重大的Bug修改、开发新的功能,以免影响开发主线。本地仓库和远程仓库中都有分支,同一个仓库可以有多个分支,各个分支相互独立,互不干扰。通过git init 命令创建本地仓库时默认会创建一个master分支。
本节我们会学习关于分支的相关命令,具体命令如下:
查看分支命令:git branch
git branch
列出所有本地分支;git branch -r
列出所有远程分支;git branch -a
列出所有本地分支和远程分支
查看关联关系我们可以使用 git branch -vv 命令
创建分支命令格式:git branch 分支名称
一个仓库中可以有多个分支,切换分支命令格式:git checkout 分支名称
创建新分支并立即切换到该分支git checkout -b new-feature
注意:在命令行中会显示出当前所在分支,如下图所示。
推送至远程仓库分支命令格式:git push 远程仓库简称 分支名称
推送完成后可以查看远程仓库:
合并分支就是将两个分支的文件进行合并处理,命令格式:git merge 分支名称
注意:分支合并时需注意合并的方向,如下图所示,在Master分支执行操作,结果就是将dev分支的内容合并到Master分支。
先在dev分支下的readme文件中新增一行并提交本地
切换到master分支下观察readme文件
将dev分支的内容与master分支合并
删除分支.不能删除当前分支,只能删除其他分支,即在删除分支的时候,一定要先退出要删除的分支,然后才能删除。
git branch -d 分支名称
删除分支时,需要做各种检查
git branch -D 分支名称
不做任何检查,强制删除
分支及合并的冲突问题
在一段时间,A、B用户修改了同一个文件,且修改了同一行位置的代码,此时会发生合并冲突。
A用户在本地修改代码后优先推送到远程仓库,此时B用户在本地修订代码,提交到本地仓库后,也需要推送到远程仓库,此时B用户晚于A用户,故需要先拉取远程仓库的提交,经过合并后才能推送到远端分支,如下图所示。
新手上路小技巧:上班第一件事先git pull,可以在一定程度上避免冲突的产生。每天下班前要做的是git push,将本地代码提交到线上仓库。
在B用户拉取代码时,因为A、B用户同一段时间修改了同一个文件的相同位置代码,故可能会发生合并冲突。此时解决思路如下。
当两个分支上对文件的修改可能会存在冲突,例如同时修改了同一个文件的同一行,这时就需要手动解决冲突,解决冲突步骤如下:
- 处理文件中冲突的地方
- 将解决完冲突的文件加入暂存区(add)
- 提交到仓库(commit)
冲突部分的内容处理如下所示:
开发中分支使用原则与流程
几乎所有的版本控制系统都以某种形式支持分支。 使用分支意味着你可以把你的工作从开发主线上分离开来进行重大的Bug修改、开发新的功能,以免影响开发主线。
在开发中,一般有如下分支使用原则与流程:
- master (生产) 分支
线上分支,主分支,中小规模项目作为线上运行的应用对应的分支; - develop(开发)分支
是从master创建的分支,一般作为开发部门的主要开发分支,如果没有其他并行开发不同期上线要求,都可以在此版本进行开发,阶段开发完成后,需要是合并到master分支,准备上线。 - feature/xxxx分支
从develop创建的分支,一般是同期并行开发,但不同期上线时创建的分支,分支上的研发任务完成后合并到develop分支。 - hotfix/xxxx分支,
从master派生的分支,一般作为线上bug修复使用,修复完成后需要合并到master、test、develop分支。 - 还有一些其他分支,在此不再详述,例如test分支(用于代码测试)、pre分支(预上线分支)等等。
标签操作
Git 中的标签,指的是某个分支某个特定时间点的状态。通过标签,可以很方便的切换到标记时的状态。比较有代表性的是人们会使用这个功能来标记发布结点(v1.0 、v1.2等)。下面是mybatis-plus的标签:
查看标签命令:git tag
创建标签命令:git tag 标签名
将标签推送至远程仓库命令:git push 远程仓库简称 标签名
推送完成后可以在远程仓库中查看标签。
检出标签时需要新建一个分支来指向某个标签,检出标签的命令格式:git checkout -b 分支名 标签名
在IDEA中使用Git
通过Git命令可以完成Git相关操作,为了简化操作过程,我们可以在IEDA中配置Git,配置好后就可以在IDEA中通过图形化的方式来操作Git。
当然也可以IDEA集成GitBash作为Terminal:
IDEA中配置Git
在IDEA中使用Git,本质上还是使用的本地安装的Git软件,所以需要提前安装好Git并在IDEA中配置Git。git.exe:Git安装目录下的可执行文件,前面执行的git命令,其实就是执行的这个文件.Git安装目录:
IDEA中的配置:
如果Git安装在默认目录中(C:\Program Files\Git),则IDEA中无需再手动配置,直接就可以使用。
获取Git仓库
在IDEA中获取Git仓库有两种方式:
- 本地初始化仓库,本质就是执行 git init 命令
- 从远程仓库克隆,本质就是执行 git clone 命令
本地初始化仓库
在IDEA中通过如下操作可以在本地初始化一个本地仓库,其实底层就是执行的 git init 命令。操作过程如下:
1)依次选择菜单【VCS】—【Import into Version Control】—【Create Git Repository】
2)在弹出的【Create Git Repository】对话框中选择当前项目根目录,点击【OK】按钮:
操作完成后可以看到当前项目根目录下出现了.git隐藏目录,可以在IDEA的工具栏中看到Git的相关操作图标:
从远程仓库克隆
在IDEA中从远程仓库克隆本质就是执行的 git clone 命令,具体操作过程如下.1)在IDEA开始窗口中点击【Get from Version Control】
2)在弹出的【Get from Version Control】窗口中输入远程仓库的URL地址和对应的本地仓库存放目录,点击【Clone】按钮进行仓库克隆操作
本地仓库操作
本地仓库操作:
- 将文件加入暂存区,本质就是执行 git add 命令
- 将暂存区的文件提交到版本库,本质就是执行 git commit 命令
- 查看日志,本质就是执行 git log 命令
将文件加入暂存区
当在Git工作区新增文件或者对已有文件修改后,就需要将文件的修改加入暂存区,具体操作如下:
将暂存区文件提交到版本库
将暂存区文件提交到版本库,可以选择一个文件进行提交,也可以选择整个项目提交多个文件。在IEDA中对文件的提交进行了简化操作,也就是如果文件修改后,无需再加入暂存区,可以直接提交。
1)提交一个文件:
可以看到,如果选中一个文件提交,则菜单名称为【Commit File…】
2)提交多个文件:
可以看到,如果提交多个文件,则菜单名称为【Commit Directory…】由于提交操作属于高频操作,所以为了进一步方便操作,在IDEA的工具栏中提供了提交操作的快捷按钮:
查看日志
查看日志,既可以查看整个仓库的提交日志,也可以查看某个文件的提交日志。
1)查看整个项目的提交日志:
2)查看某个文件的提交日志
远程仓库操作
远程仓库操作:
- 查看远程仓库,本质就是执行 git remote 命令
- 添加远程仓库,本质就是执行 git remote add 命令
- 推送至远程仓库,本质就是执行 git push 命令
- 从远程仓库拉取,本质就是执行 git pull 命令
查看远程仓库
添加远程仓库
一个本地仓库可以配置多个远程仓库,在【Git Remotes】窗口中点击【+】来添加一个新的远程仓库:
推送至远程仓库
在弹出的【Push Commits】窗口中可以看到本次推送的文件,点击【Push】按钮即可推送至远程仓库:
由于推送至远程仓库操作属于高频操作,所以可以通过IDEA工具栏中的提交快捷按钮同时完成提交和推送:
从远程仓库拉取
由于从远程仓库拉取文件属于高频操作,所以在IDEA的工具栏中提供了对应的快捷按钮:
分支操作
分支操作:
- 查看分支,本质就是执行 git branch 命令
- 创建分支,本质就是执行 git branch 分支名 命令
- 切换分支,本质就是执行 git checkout 命令
- 将分支推送到远程仓库,本质就是执行 git push 命令
- 合并分支,本质就是执行 git merge 命令
查看分支
在弹出的窗口中可以看到本地分支和远程分支:
由于分支操作属于高频操作,所以在IDEA的状态栏中提供了分支操作的快捷按钮:
点击【master】快捷按钮即可弹出【Git Branches】分支窗口:
创建分支
在【Git Branches】分支窗口中点击【New Branch】,弹出如下窗口:
在弹出的【Create New Branch】窗口中输入新分支的名称,点击【Create】按钮完成分支创建
切换分支
将分支推送到远程仓库
合并分支
ok 写完了 有些地方写的可能比较简单
这里贴几篇我在写这篇博客之前参考的比较多的几个文章 写的都还可以 本文主要是我的个人回忆总结 如果有什么写的不好的地方 也可以看看这些文章
Git入门到精通全套教程(涵盖GitHub\Gitee码云)
超级完整的 Git的下载、安装、配置与使用 以及命令
实现在IDEA中将项目上传至github远端仓库
相关文章:

Git总结超全版
最近想系统的回顾一下Git的使用,如果只想快速的集成git到idea,可以参考另一篇我的博客中的git部分 目录 版本管理工具简介Git安装与配置Git远程仓库配置 Git常用命令为常用命令配置别名(可选)Git忽略文件.gitignore一些概念*本地仓库操作删除仓库内容 *远…...

网络安全之安全协议浅谈
安全协议 安全协议概述安全协议分类IPSecIPSec安全协议IPSec架构IPSec封装模式AH协议ESP协议SET协议SET协议电子交易模型SET协议安全目标认证中心CA 安全协议概述 安全协议是信息交换安全的核心,它在网络不同层次上、针对不同应用,通过对各种密码学技术…...
华为云部署前端项目发生的事
今天刚买了一个云服务,想着部署一下前端项目: 使用的是 docker nginx 部署 部署方法,在以往的文章中有介绍,如有兴趣可以看看docker 部署; 结果发现部署成功之后,竟然无法访问,从命令来看&…...
需求:实现一个可以统计代码的运行时间
需求:有一个做加法计算的函数,要统计执行这个加法函数代码运行了多久 import timedef add(a, b):time.sleep(1)return a bst time.time() add(100, 200) et time.time() print("该函数运行时间为:", et - st) 学了闭包&#x…...
软考高级之redis中使用zset实现延迟队列,你答对了么?
实现延迟队列的思路 zset的特性,带有分数的排序,以时间戳作为分数进行排序 添加任务 zdd取出任务 zrangbyscore执行任务 zrem 定时任务 public static void main(String[] args) {Jedis jedis new Jedis("ip", 6379);TimerTask task new …...

CS 下载安装详解
目录 CS简介: CS下载地址: CS的安装: CS简介: CS为目前渗透中常用的一款工具,它的强大在于控制windows木马,CS主要控制windows木马。 CS下载地址: 链接:https://pan.baidu.com/…...
前端canvas项目实战——在线图文编辑器(十):小地图MiniMap(上)
目录 前言一、 效果展示二、 实现步骤0. 行动前的思考1. 为小地图更新「背景图」2. 为小地图更新「滑动窗口」2.1 获取新的滑动窗口「宽高」2.2 获取新的滑动窗口「位置」3. 为小地图更新「遮罩」后记前言 上一篇博文中,我们引入了「逻辑画布」的概念,让整个工具的页面看起来…...
linux的chmod的数字太难记了,用u, g, o, a更简单!
u, g, o, 和 a是用来设置或查看文件或目录权限在类Unix或Linux系统中的特殊字符,它们分别代表文件或目录的所有者(user)、所属组(group)、其他用户(others)和所有用户(all users)。 而权限方r和w是其中的两种,分别代表读权限(read࿰…...

牛客热题:有效括号
📟作者主页:慢热的陕西人 🌴专栏链接:力扣刷题日记 📣欢迎各位大佬👍点赞🔥关注🚓收藏,🍉留言 文章目录 牛客热题:有效括号题目链接方法一&#x…...
利用SQL语句实现多表联合查询——多表关系介绍
1.多对多查询 先创建一个student表和course表,应该利用外键来实现,通过一个中间表分别对应student和course中的id CREATE TABLE student (id INT unsigned PRIMARY KEY,name VARCHAR(255),no VARCHAR(50) ); CREATE TABLE course (id INT PRIMARY KEY,…...

Java中IO流类的体系
Java为我们提供了多种多样的IO流,我们可以根据不同的功能及性能要求挑选合适的IO流,如图所示,为Java中IO流类的体系。 从上图发现,很多流都是成对出现的,比如: FileInputStream/FileOutputStream࿰…...

【调试笔记-20240521-Linux-编译 QEMU/x86_64 可运行的 OpenWrt 固件】
调试笔记-系列文章目录 调试笔记-20240521-Linux-编译 QEMU/x86_64 可运行的 OpenWrt 固件 文章目录 调试笔记-系列文章目录调试笔记-20240521-Linux-编译 QEMU/x86_64 可运行的 OpenWrt 固件 前言一、调试环境操作系统:Ubuntu 22.04.4 LTS编译环境调试目标 二、调…...
GitLab的原理及应用详解(六)
本系列文章简介: 随着软件开发的不断进步和发展,版本控制系统成为了现代软件开发过程中不可或缺的一部分。而GitLab作为其中一种流行的版本控制工具,在软件开发领域享有广泛的应用。GitLab不仅提供了强大的版本控制功能,还集成了项…...

【调和级数】100321. 优质数对的总数 II
本文涉及知识点 调和级数 质数、最大公约数、菲蜀定理 LeetCode100321. 优质数对的总数 II 给你两个整数数组 nums1 和 nums2,长度分别为 n 和 m。同时给你一个正整数 k。 如果 nums1[i] 可以被 nums2[j] * k 整除,则称数对 (i, j) 为 优质数对&#…...
Java SE入门及基础(54) 函数式接口
目录 1. 什么是函数式接口 函数式接口 示例 示例 2. 函数式编程 示例 3. Lambda 表达式延迟执行 应用场景 示例 4. Consumer 接口 解释说明 示例 5. BiConsumer 接口 解释说明 示例 6. Predicate 接口 解释说明 示例 练习 7. Function 接口 解释说明 示例…...

轻松同步:将照片从三星手机传输到iPad的简便方法
概括 想要在新 iPad 上查看三星照片吗?但是,如果您不知道如何将照片从三星手机传输到 iPad,则无法在 iPad 上查看图片。为此,本文分享了 7 个有用的方法,以便您可以使用它们在不同操作系统之间轻松发送照片。现在&…...
MySQL查询某个字段含有字母数字的值
在MySQL中,要查询某个字段含有字母和数字的值,可以使用正则表达式配合REGEXP操作符。以下是一个详细的示例,说明如何编写这样的查询。 假设我们有一个名为my_table的表,其中有一个名为my_column的字段,我们想要查询这…...
通关!游戏设计之道Day14
力量与你同在 所有类型的游戏里,赛车类,解谜类,动作冒险类和射击类你都能找到强化道具。 强化道具 设计强化道具时,设计师应该开动脑筋琢磨下面几个问题 1.强化道具有什么用? 2.他长什么样子,在整个游戏…...

实现一个自定义 hook,用于强制刷新当前组件
写在前面 在 react 中,如果 state 数据发生变化,我们知道,会重新渲染该组件。 但是这个前提是我们需要依赖 state 数据的变化,那比如我们并不想定义 state,又或者说我们的操作不能引起 state 的变化,此时…...

牛客热题:滑动窗口的最大值
📟作者主页:慢热的陕西人 🌴专栏链接:力扣刷题日记 📣欢迎各位大佬👍点赞🔥关注🚓收藏,🍉留言 文章目录 牛客热题:滑动窗口的最大值题目链接方法一…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...

通过Wrangler CLI在worker中创建数据库和表
官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

tree 树组件大数据卡顿问题优化
问题背景 项目中有用到树组件用来做文件目录,但是由于这个树组件的节点越来越多,导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多,导致的浏览器卡顿,这里很明显就需要用到虚拟列表的技术&…...

Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计
随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...

算法:模拟
1.替换所有的问号 1576. 替换所有的问号 - 力扣(LeetCode) 遍历字符串:通过外层循环逐一检查每个字符。遇到 ? 时处理: 内层循环遍历小写字母(a 到 z)。对每个字母检查是否满足: 与…...
【JavaSE】多线程基础学习笔记
多线程基础 -线程相关概念 程序(Program) 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序,比如我们使用QQ,就启动了一个进程,操作系统就会为该进程分配内存…...
React从基础入门到高级实战:React 实战项目 - 项目五:微前端与模块化架构
React 实战项目:微前端与模块化架构 欢迎来到 React 开发教程专栏 的第 30 篇!在前 29 篇文章中,我们从 React 的基础概念逐步深入到高级技巧,涵盖了组件设计、状态管理、路由配置、性能优化和企业级应用等核心内容。这一次&…...