Git 操作与技巧
一、开发日常常用 Git 操作与技巧
1.1 基础操作
1.1.1 查看 Git 状态
git status
:查看当前工作区的状态,了解哪些文件已经修改、哪些文件已经暂存。
这个命令是最常用的命令之一,可以帮助你理解当前的开发状态,哪些文件已经被修改、哪些已经添加到暂存区、哪些是新创建的文件。git status
1.1.2 查看提交历史
git log
:查看提交历史。
用git log --oneline
--oneline
可以让输出更简洁,只显示提交 ID 和提交信息。你还可以添加更多参数来过滤和美化日志:git log --graph
:以图形化的方式显示分支结构。git log --stat
:显示每个提交修改的文件和行数。
1.1.3 跳转到指定版本
git checkout <commit>
:可以通过commit
ID 跳转到某个版本。
或者切换到某个分支:git checkout <commit>
如果你想恢复到某个历史版本进行修复或查看,可以使用这个命令。注意,如果你只是查看某个提交而不打算修改,可以创建一个“分离头指针”状态(detached HEAD),确保不会丢失后续的工作。git checkout <branch-name>
1.1.4 还原文件
-
git checkout -- <file>
:恢复某个文件的修改,回到上次提交的版本。git checkout -- <file>
这个命令会将文件从工作区还原到暂存区最后一次提交时的状态,常用来撤销工作区的修改。
-
git reset <file>
:撤销暂存区的修改,使文件回到工作区,但不会删除文件的内容。git reset <file>
1.2 分支与合并操作
1.2.1 创建和切换分支
-
git checkout -b <branch-name>
:创建并切换到一个新分支。git checkout -b feature/new-feature
用这个命令可以一次性创建一个新分支并切换过去。
-
git switch <branch-name>
:切换到指定的分支。相比git checkout
,git switch
命令更加直观,专门用于分支切换。git switch feature/new-feature
1.2.2 合并分支
git merge <branch>
:将指定的分支合并到当前分支。
合并时,Git 会尝试自动合并文件。如果有冲突,Git 会标记出冲突部分,开发者需要手动解决冲突。git merge feature/new-feature
1.2.3 解决合并冲突
-
冲突标记:合并冲突发生时,Git 会在冲突的文件中插入冲突标记:
<<<<<<< HEAD 当前分支的内容 ======= 合并分支的内容 >>>>>>> feature/new-feature
你需要手动编辑文件,决定如何合并这些内容,删除标记后再提交。
-
git add <file>
:解决冲突后,使用git add
把文件添加到暂存区。git add <file>
1.2.4 删除分支
-
git branch -d <branch-name>
:删除本地分支。只有在该分支已经合并到当前分支时,才允许删除。git branch -d feature/new-feature
-
git branch -D <branch-name>
:强制删除本地分支,即使该分支尚未合并。git branch -D feature/new-feature
1.2.5 合并分支时保持干净历史(Rebase)
git rebase <branch>
:将当前分支的提交“移动”到目标分支的顶端,保持提交历史的线性。git rebase master
rebase
操作会修改历史提交的基础(变基),因此在多人协作时要小心,尤其是在公共分支上进行rebase
操作时。
1.3 高级命令与技巧
1.3.1 恢复丢失的提交(使用 reflog)
git reflog
:查看 Git 的所有操作历史,包括分支切换、提交、合并等,即使这些操作没有保留在当前分支历史中。
如果你丢失了某些提交或者误删除了分支,可以通过git reflog
reflog
找回历史状态。
1.3.2 变基多个提交(交互式 rebase)
git rebase -i <commit>
:交互式变基,可以修改历史提交,包括重新排序、合并提交、修改提交信息等。
这将允许你对最近的三个提交进行编辑。在交互式编辑模式下,你可以选择git rebase -i HEAD~3
pick
、reword
、edit
、squash
等操作。
1.3.3 挑选特定提交(cherry-pick
)
git cherry-pick <commit>
:从其他分支选择特定的提交应用到当前分支。这对于将某个 bug 修复引入到多个分支非常有用。git cherry-pick <commit>
1.3.4 更新远程仓库
-
git push
:推送本地分支到远程仓库,更新远程分支。git push origin feature/new-feature
-
git push -f
:强制推送。git push -f
强制将本地分支推送到远程仓库,覆盖远程的内容。通常用于rebase
后,需要强制更新远程分支的情况。但使用时要小心,因为它会覆盖远程分支的历史。 -
git pull
:拉取远程仓库的更新并合并到当前分支。git pull origin master
1.4 常见开发场景与解决方案
1.4.1 你已提交错误的文件
-
撤销最后一次提交(不删除文件):
git reset --soft HEAD~1
这会将最后一次提交撤销,但不会删除文件,只是将文件从暂存区移回工作区。
-
删除最后一次提交及其修改:
git reset --hard HEAD~1
这会彻底删除最后一次提交及其修改,恢复到上一个提交状态。
1.4.2 合并后撤销更改
- 撤销合并并恢复到合并前的状态:
如果合并时遇到问题并希望撤销合并,可以使用这个命令。git merge --abort
1.4.3 确保提交规范
使用 Git 钩子(如 pre-commit
)来确保每次提交符合代码规范、格式或测试要求。可以集成 eslint
、prettier
、jest
等工具,自动执行代码格式化和测试,避免提交错误的代码。
二、常见 Git 工作流
2.1 GitHub Flow
- 从
main
分支创建一个新的功能分支。 - 在功能分支上进行开发并提交。
- 提交完成后,创建 Pull Request(PR)进行代码审查。
- 审查通过后将功能分支合并回
main
。 - 直接部署到生产环境。
2.2 GitFlow
- 创建
develop
分支,作为主要的开发分支。 - 每个新特性在
feature
分支上开发。 - 功能完成后,合并回
develop
。 - 当准备发布时
,从 develop
创建 release
分支,并进行最终修复。
5. 发布后,release
分支合并回 main
和 develop
。
6. 紧急修复时创建 hotfix
分支。
继续深入一些开发中常用的 Git 操作技巧 和 常见问题的解决方法,帮助你应对更多的开发场景。
三、Git 进阶技巧与解决方案
3.1 git stash
:临时保存工作进度
在你进行开发时,可能会遇到需要暂时切换分支或处理中断的情况,而不希望把当前工作状态提交到版本库。此时 git stash
非常有用,它可以将你的当前工作区(工作区和暂存区的内容)暂存起来,恢复到干净的状态,待你完成其他任务后再恢复。
3.1.1 使用 git stash
保存进度
-
git stash
:保存当前工作进度并将工作区恢复到上次提交的状态。git stash
-
git stash save "message"
:保存当前进度,并为这次保存添加描述信息。git stash save "WIP: Fix issue with login"
-
git stash list
:查看所有的暂存记录。git stash list
3.1.2 恢复暂存的进度
-
git stash apply
:恢复最近的一次暂存记录,但不删除该记录。git stash apply
-
git stash pop
:恢复最近的一次暂存记录,并删除该记录。git stash pop
-
git stash drop
:删除指定的暂存记录。git stash drop stash@{0}
3.1.3 删除所有暂存记录
git stash clear
:删除所有的暂存记录。git stash clear
3.2 git cherry-pick
:挑选提交
git cherry-pick
是一个非常实用的命令,可以从其他分支挑选特定的提交并将其应用到当前分支。这在处理 bug 修复或将某些功能迁移到不同分支时非常有用。
3.2.1 使用 git cherry-pick
选择提交
-
git cherry-pick <commit-id>
:将指定的提交应用到当前分支。git cherry-pick a1b2c3d4
如果发生冲突,Git 会提示你解决冲突,解决后运行
git add
并使用git cherry-pick --continue
完成合并。
3.2.2 合并多个提交
git cherry-pick <commit-id1> <commit-id2>
:挑选多个提交。git cherry-pick a1b2c3d4 e5f6g7h8
四、Git 远程仓库的高级操作
4.1 远程仓库操作
4.1.1 查看远程仓库
git remote -v
:查看远程仓库的 URL。git remote -v
4.1.2 添加远程仓库
git remote add <name> <url>
:将一个远程仓库添加到本地。git remote add origin https://github.com/username/repo.git
4.1.3 拉取远程更新
-
git pull
:拉取并合并远程分支的最新更改到当前分支。git pull origin master
-
git fetch
:仅拉取远程仓库的更新,不合并。可以先检查更新的内容,再决定是否合并。git fetch origin
4.1.4 推送本地更改
git push
:将本地分支推送到远程仓库。git push origin feature/awesome-feature
4.1.5 强制推送(慎用)
-
git push -f
:强制推送,将本地分支的更改覆盖远程分支。这对于推送修改历史(如rebase
后的提交)时很有用,但要小心,这可能会导致丢失其他人的提交。git push -f origin feature/awesome-feature
-
git push --force-with-lease
:推荐使用--force-with-lease
,它会在推送时确保本地分支没有被其他人更新过,避免强制推送覆盖其他人的更改。git push --force-with-lease origin feature/awesome-feature
五、处理常见开发问题
5.1 工作区修改丢失
有时你可能会不小心丢失了工作区的修改,例如忘记执行 git add
或 git commit
,此时你可以尝试以下方法:
5.1.1 查看本地文件修改
git diff
:查看工作区和暂存区的差异,帮助你找回丢失的修改。git diff
5.1.2 使用 git reflog
恢复丢失的提交
git reflog
记录了所有的操作历史,包括那些已经被 reset
或 rebase
的提交。如果你不小心丢失了某些提交,可以使用 reflog
恢复它们。
-
git reflog
:查看所有 Git 操作的历史。git reflog
-
找到你丢失的提交并使用
git checkout
恢复:git checkout <commit-id>
5.1.3 恢复删除的文件
如果你在不小心删除了文件的情况下提交了更改,可以使用以下命令恢复文件:
git checkout -- <file>
:恢复文件到上次提交时的状态。git checkout -- path/to/file
5.2 在多人协作中解决冲突
冲突是多人协作时不可避免的,尤其是在并行开发的情况下。以下是处理冲突的一些技巧:
5.2.1 处理冲突
-
git status
:检查哪些文件有冲突。git status
-
编辑冲突文件:打开冲突文件,手动解决冲突,删除冲突标记。
<<<<<<< HEAD 当前分支的内容 ======= 合并分支的内容 >>>>>>> feature/xyz
-
git add
:解决冲突后,使用git add
将解决后的文件添加到暂存区。git add path/to/conflict-file
-
git commit
:完成冲突解决后,进行提交。git commit
5.2.2 避免不必要的冲突
-
拉取最新的代码:在开始新工作之前,始终确保你拉取了远程仓库的最新更改,并且解决了所有冲突。
git pull origin master
-
分支粒度:在开发过程中保持分支粒度较小,避免在同一个分支上长时间进行大量修改。这样可以减少冲突发生的概率。
六、Git 的最佳实践
6.1 提交信息规范
良好的提交信息可以帮助团队成员更好地理解变更的内容。以下是提交信息的一些最佳实践:
- 简洁明了:提交标题应该简洁,通常不超过 50 个字符,说明这次提交的目的和变更。
- 动词开头:提交信息通常以动词开头,如 “Fix bug”, “Add feature”。
- 详尽描述:如果需要更多描述,可以在提交信息正文部分进行详细说明。
- 避免杂乱无章的提交:避免提交与当前任务无关的更改。
6.2 代码审查与合并请求(PR)
代码审查是一项重要的团队协作工作,帮助确保代码质量。合并请求(PR)应包含以下内容:
- 描述变更:PR 应详细描述其变更内容、目的以及如何测试。
- 审查清单:确保在提交 PR 前,已经检查了代码格式、功能性测试、性能等方面。
- 避免一次性提交大量更改:PR 应尽量保持小而清晰,避免一次性提交大量更改,这样更容易进行代码审查。
继续深入探讨更多的 Git 实用操作技巧和常见开发问题的解决方案,帮助你更好地应对实际开发中的各种挑战。
七、Git 高级操作
7.1 git bisect
:二分查找 bug
git bisect
是一个非常强大的工具,可以帮助你通过二分查找的方式,快速定位引入 bug 的提交。它通过反复“切分”提交历史,帮助你在大量提交中找到具体导致问题的那个提交。
7.1.1 使用 git bisect
查找 bug
-
开始 bisect:
- 启动
git bisect
,告诉 Git 你已经确定某个提交是坏的(有 bug)和某个提交是好的(没有 bug)。
git bisect start git bisect bad # 表示当前提交是坏的 git bisect good <commit-id> # 表示某个已知良好的提交
- 启动
-
执行 bisect 查找:
- Git 会根据你提供的好坏提交,在提交历史中切分,检查一个中间的提交。
- 在每次测试之后,告诉 Git 该提交是好是坏:
git bisect good # 如果当前提交没有 bug git bisect bad # 如果当前提交有 bug
-
结束 bisect:
- 当 Git 找到引入 bug 的提交时,会停止 bisect。你可以查看结果,并使用
git bisect reset
恢复到之前的状态。
git bisect reset
- 当 Git 找到引入 bug 的提交时,会停止 bisect。你可以查看结果,并使用
7.1.2 git bisect
的工作原理
git bisect
基于二分查找的算法,每次会缩小搜索范围,快速找到引入 bug 的具体提交。这个过程对于调试历史代码中的 bug 极其高效,特别是在提交量较大的项目中。
7.2 git rebase
vs git merge
:如何选择
git rebase
和 git merge
都可以用来将一个分支的更改集成到另一个分支,但它们有不同的行为和适用场景。
7.2.1 git merge
的特点
- 保留提交历史:
git merge
会生成一个合并提交,保留原有的提交历史。 - 适合多人协作:当多个开发者在不同分支上并行工作时,使用
git merge
更加安全,可以保留每个人的独立提交历史。
7.2.2 git rebase
的特点
- 历史更加简洁:
git rebase
会将当前分支的提交“重新应用”到目标分支的最新提交上,产生更简洁、线性的提交历史。 - 适用于个人开发:
git rebase
适合在个人分支上使用,它有助于保持一个清晰、干净的提交历史。但如果在多人协作的项目中,特别是公共分支,使用git rebase
可能会导致历史冲突或丢失提交,因此需要小心使用。
7.2.3 选择哪种操作
- 当你想要保持历史分支清晰、干净时,可以选择
git rebase
。例如,更新自己的功能分支,使其与main
分支同步。 - 当你想保留历史的所有分支信息,确保每个人的开发过程都能被追溯时,可以使用
git merge
。
7.3 git tag
:为特定提交打标签
在开发过程中,标记一个重要的提交,如发布版本、发布里程碑等,是一个常见需求。git tag
命令允许你为特定提交打上标签,便于版本控制和回溯。
7.3.1 创建标签
-
轻量标签:简单的标签,不包含额外信息。
git tag v1.0
-
附注标签:包含作者信息、时间和标签说明等详细信息。
git tag -a v1.0 -m "Release version 1.0"
7.3.2 查看标签
-
查看所有标签:
git tag
-
查看特定标签的提交信息:
git show v1.0
7.3.3 推送标签到远程仓库
-
推送单个标签:
git push origin v1.0
-
推送所有标签:
git push --tags
7.3.4 删除标签
-
删除本地标签:
git tag -d v1.0
-
删除远程标签:
git push --delete origin v1.0
八、Git 与 CI/CD 集成
在现代开发中,Git 是持续集成(CI)和持续交付(CD)流程的重要组成部分。理解如何将 Git 与 CI/CD 工具集成,可以提升团队开发效率和代码质量。
8.1 自动化部署:与 CI/CD 集成
-
GitHub Actions:使用 GitHub 提供的自动化工作流服务,可以在每次推送到 Git 仓库时触发构建、测试、部署等操作。
-
Jenkins、GitLab CI/CD、CircleCI 等工具:这些工具可以与 Git 仓库集成,在每次提交时自动构建、测试和部署应用程序。它们通常会拉取最新的 Git 提交,执行构建和测试,然后自动部署到预生产或生产环境。
8.2 配置 Git 钩子实现自动化任务
Git 提供了一些钩子(hooks),你可以在提交、推送等操作时自动触发某些任务(例如代码格式化、运行单元测试等)。
常用的 Git 钩子文件在 .git/hooks/
目录下,包括:
pre-commit
:在每次提交之前运行,可以用来进行代码格式化、静态检查等。post-commit
:在提交完成后运行,可以用来发送通知、更新问题追踪系统等。pre-push
:在推送前执行,可以用于检查是否通过了所有的单元测试。
例如,使用 pre-commit
钩子在每次提交时自动运行 eslint
:
-
安装
pre-commit
工具:pip install pre-commit
-
创建一个
.pre-commit-config.yaml
文件:- repo: https://github.com/prettier/prettierrev: v2.3.2hooks:- id: prettierfiles: \.js$
-
安装钩子:
pre-commit install
-
每次提交时,
pre-commit
会自动运行指定的工具来检查代码。
九、常见 Git 问题及解决方法
9.1 恢复丢失的文件
如果不小心丢失了工作区的文件,可以使用以下方法恢复:
-
恢复已删除的文件:使用
git checkout
恢复已删除的文件。git checkout -- <file>
-
从历史版本恢复文件:如果文件已经被提交,可以从历史中恢复。
git checkout <commit-id> -- <file>
9.2 解决文件冲突
冲突是多人开发时经常遇到的问题,Git 会在文件冲突时标记出冲突部分。解决冲突时,按照以下步骤操作:
-
查看冲突文件:使用
git status
查看哪些文件有冲突。git status
-
编辑冲突文件:手动解决冲突,删除 Git 插入的标记。
<<<<<<< HEAD 当前分支的内容 ======= 合并分支的内容 >>>>>>> feature/xyz
-
添加解决后的文件:解决冲突后,使用
git add
将文件添加到暂存区。git add <file>
-
完成提交:
git commit
9.3 解决推送失败
有时你可能会遇到推送失败的情况,特别是在团队协作时。如果推送失败,通常是因为远程分支比本地分支更新,导致了冲突。
-
拉取远程分支的更新:
git pull origin master
-
解决冲突并提交:如果拉取时发生冲突,解决冲
突后再进行提交。
- 重新推送:
git push origin master
十、总结
掌握 Git 的各种操作技巧,可以大大提高你的开发效率,避免许多常见的开发问题。在日常开发中,合理使用分支管理、提交规范、以及与 CI/CD 集成,能够确保代码质量和团队协作的顺畅。同时,了解和熟练使用一些 Git 的高级操作,如 git bisect
、git rebase
和标签管理,也能帮助你更好地管理项目和调试 bug。
通过不断实践和积累经验,你将能在 Git 的世界中游刃有余,更高效地完成开发任务。
相关文章:
Git 操作与技巧
一、开发日常常用 Git 操作与技巧 1.1 基础操作 1.1.1 查看 Git 状态 git status:查看当前工作区的状态,了解哪些文件已经修改、哪些文件已经暂存。git status这个命令是最常用的命令之一,可以帮助你理解当前的开发状态,哪些文…...
vs2022开发.net窗体应用开发环境安装配置以及程序发布详细教程
文章目录 一、安装visual studio1.1推荐win10操作系统1.2推荐vs20221.3选择工作负载 二、新建基于.net的winform应用程序2.1为什么要.net 2.2 新建.net窗体应用2.2.1 选择Window窗体应用2.2.2 .net窗体对比framework窗体 三、发布.net应用 一、安装visual studio 1.1推荐win10…...
Mysql--基础篇--视图,存储过程,触发器
1、视图 MySQL视图(View)是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表&#…...
代码随想录 哈希 test 8
18. 四数之和 - 力扣(LeetCode) 与三数之和类似,重点在剪枝和去重的区别,由于target可正可负,因此需要分两种情况讨论,如果target为正,则若当前选择的元素之和大于target,需要跳出这…...
Postman接口测试基本操作
🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 Postman-获取验证码 需求:使用Postman访问验证码接口,并查看响应结果。 地址:http://kdtx-test.itheima.net/api/captchaIm…...
Three.js 渲染技术:打造逼真3D体验的幕后功臣
文章目录 前言一、着色器(Shaders)二、后处理(Post-processing)三、抗锯齿(Anti-aliasing)四、实时渲染与离线渲染五、光照模型与材质优化六、环境映射(Environment Mapping)七、纹理…...
uml活动图和用例图之间有一致性要求吗
UML(统一建模语言)中的活动图和用例图是两种不同的图表,它们用于描述软件系统的不同方面。尽管它们有不同的用途,但它们之间存在一定的一致性要求,以保证模型的有效性和准确性。 以下是活动图和用例图之间一致性要求的…...
嵌入式入门Day38
C Day1 第一个C程序C中的输入输出输出操作coutcin练习 命名空间使用方法自定义命名空间冲突问题 C对字符串的扩充C风格字符串的使用定义以及初始化C风格字符串与C风格字符串的转换C风格的字符串的关系运算常用的成员变量输入方法 布尔类型C对堆区空间使用的扩充作业 第一个C程序…...
什么叫区块链?怎么保证区块链的安全性?
区块链(Blockchain)是一种分布式数据库或账本技术,它通过去中心化的方式记录交易或其他数据,并确保这些记录是安全、透明和不可篡改的。区块链最初是作为比特币(Bitcoin)加密货币的基础技术而被公众所知&am…...
探秘block原理
01 概述 在iOS开发中,block大家用的都很熟悉了,是iOS开发中闭包的一种实现方式,可以对一段代码逻辑进行封装,使其可以像数据一样被传递、存储、调用,并且可以保存相关的上下文状态。 很多block原理性的文章都比较老&am…...
Unity2D初级背包设计后篇 拓展举例与不足分析
Unity2D初级背包设计中篇 MVC分层撰写(万字详解)-CSDN博客、 如果你已经搞懂了中篇,那么对这个背包的拓展将极为简单,我就在这里举个例子吧 目录 1.添加物品描述信息 2.拓展思路与不足分析 1.没有删除只有丢弃功能,所以可以添加垃圾桶 2.格…...
云计算基础,虚拟化原理
文章目录 一、虚拟化1.1 什么是虚拟化1.2 虚拟化类型 二 、存储虚拟化2.1 存储指标2.2 存储类型2.3 存储协议2.4 RAID 三、内存 i/O虚拟化3.1 内存虚拟化基本概念地址空间转换原理内存共享与隔离原理 3.2 I/O 虚拟化基本概念模拟(Emulation)方式半虚拟化…...
Android13工具修改wifi mac地址以后没有更新的问题
Android13系统在通过烧写工具更新修改wifi mac地址以后,在系统设置里面查看wifi mac地址还是之前的,没有更新。 原因:android13 系统中packages\modules\Wifi\service\ServiceWifiResources\res\values\config.xml新增了"config_wifiSav…...
Jmeter_后置处理beanshell
背景:调用Eolinker接口,统计接口测试用例的完成情况,并写入excel文件; 1、调用登录接口,JSON提取器提取接口返回的accessToken,再封装到HTTP信息头管理器中; 2、请求工作空间列表接口࿰…...
熵与交叉熵:从不确定性角度理解 KL 散度
从不确定性减少视角理解KL散度 损失函数相关文章(置顶) 1. KL 散度:多维度解读概率分布间的隐秘 “距离” 2. 熵与交叉熵:从不确定性角度理解 KL 散度 3. 机器学习、深度学习关于熵你所需要知道的一切 本文核心 由于熵表征不确定…...
HarmonyOS鸿蒙开发 弹窗及加载中指示器HUD功能实现
HarmonyOS鸿蒙开发 弹窗及加载中指示器HUD功能实现 最近在学习鸿蒙开发过程中,阅读了官方文档,在之前做flutter时候,经常使用overlay,使用OverlayEntry加入到overlayState来做添加悬浮按钮、提示弹窗、加载中指示器、加载失败的t…...
KG-CoT:基于知识图谱的大语言模型问答的思维链提示
一些符号定义 知识图谱实体数量: n n n 知识图谱中关系类型数量: m m m 三元组矩阵: M ∈ { 0 , 1 } n n m \textbf{M} \in \{0, 1\}^{n \times n \times m} M∈{0,1}nnm, M i j k 1 M_{ij}^k 1 Mijk1则说明实体 i i i和实…...
(2024,影响 LLaVA 性能的因素,LLM 模型规模,视觉输入配置(网格/token 数),AnyRes,数据量/质量)
LLaVA-NeXT: What Else Influences Visual Instruction Tuning Beyond Data? 目录 0. 简介 1. 架构 1.1 语言模型 1.2 视觉编码器 2. 视觉表示 2.1 训练时分辨率和 token 数量配置 2.2 LLM 扩展的有效性 2.3 放大原始图像 2.4 推理时分辨率和 token 数量配置 2.5 池…...
Vue3 网络请求
文章目录 Vue3 网络请求CORS问题ajaxfetchaxios Vue3 网络请求 CORS问题 同源:指的是当前用户所在的URL与被请求的URL的协议名、域名、端口必须完全相同。一旦有一个或多个不同,就是非同源请求,也就是我们经常说的跨域请求,简称…...
全方位解读消息队列:原理、优势、实例与实践要点
全方位解读消息队列:原理、优势、实例与实践要点 一、消息队列基础认知 在数字化转型浪潮下,分布式系统架构愈发复杂,消息队列成为其中关键一环。不妨把消息队列想象成一个超级“信息驿站”,在古代,各地的信件、物资运…...
Java-数据结构-栈与队列(StackQueue)
一、栈(Stack) ① 栈的概念 栈是一种特殊的线性表,它只允许固定一端进行"插入元素"和"删除元素"的操作,这固定的一端被称作"栈顶",对应的另一端就被称做"栈底"。 📚 栈中的元素遵循后…...
Transformer入门教程全解析(一)
一、开篇:走进Transformer的奇妙世界 在当今深度学习领域,Transformer 无疑是一颗璀璨的明星,它如同一股强大的变革力量,席卷了自然语言处理(NLP)乃至更多领域。从机器翻译到文本生成,从问答系…...
拼音读音基础
文章目录 一、音节1、结构2、声母3、韵母 二、声调 拼音读音往往被认为跟应试考试相关,学会正常交流口语以后不再进行关注,其实还是有必要了解细节、查漏补缺。 一、音节 1、结构 音节 声母 韵母;一个音节基本等于一个汉字; 2、…...
Qt 坐标系统和坐标变换
一、概述:1、QPainter在QPaintDevice上绘图的默认坐标系统是,原点(0,0)在左上角,x轴正方向水平向右,y轴正方向竖直向下的坐标系。 2、为了绘图的方便,QPainter提供了一些坐标变换的功能,通过平移、旋转、缩放等坐标变…...
【redis】ubuntu18安装redis7
在Ubuntu 18下安装Redis7可以通过以下两种方法实现:手动编译安装和使用APT进行安装。 Ubuntu 18系统的环境和版本: $ cat /proc/version Linux version 4.15.0-213-generic (builddlcy02-amd64-079) (gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04)…...
Outlook 网页版一直提示:检测到重复的重定向
Outlook 网页版提示“检测到重复的重定向”通常是由于浏览器缓存、Cookie问题或浏览器插件引发的。可以按照以下步骤进行排查和解决: 1. 清除浏览器缓存和 Cookie 在浏览器设置中找到清除浏览数据的选项。勾选“缓存文件”和“Cookies”相关选项,然后清…...
初级前端面试题 - js
前言:众所周知,HTML,CSS,JS是学习前端所必备的。js的基础学好了,框架类的vue,react等都会接受的很快,因此js是前端很总要的一个部分,这篇文章将会结合面试题,对js的知识点进行总结 号外号外,这是…...
matlab的绘图的标题中(title)添加标量以及格式化输出
有时候我们需要在matlab绘制的图像的标题中添加一些变量,这样在修改某些参数后,标题会跟着一块儿变。可以采用如下的方法: x -10:0.1:10; %x轴的范围 mu 0; %均值 sigma 1; %标准差 y normpdf(x,mu,sigma); %使用normpdf函数生成高斯函数…...
51单片机——串口通信(重点)
1、通信 通信的方式可以分为多种,按照数据传送方式可分为串行通信和并行通信; 按照通信的数据同步方式,可分为异步通信和同步通信; 按照数据的传输方向又可分为单工、半双工和全双工通信 1.1 通信速率 衡量通信性能的一个非常…...
mapbox基础,style样式汇总,持续更新
👨⚕️ 主页: gis分享者 👨⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言二、🍀根属性2.1 so…...
用AI技术提升Flutter开发效率:ScriptEcho的力量
引言 在当今快速发展的技术时代,Flutter作为一种跨平台开发框架,正在越来越多的开发者中崭露头角。它不仅能够为开发者提供一套代码同时部署到iOS和Android平台的解决方案,还能帮助企业节省人力成本和开发时间。然而,对于新手开发…...
Java阶段四04
第4章-第4节 一、知识点 CSRF、token、JWT 二、目标 理解什么是CSRF攻击以及如何防范 理解什么是token 理解什么是JWT 理解session验证和JWT验证的区别 学会使用JWT 三、内容分析 重点 理解什么是CSRF攻击以及如何防范 理解什么是token 理解什么是JWT 理解session验…...
vivado 时钟指南
时钟指南 每个 FPGA 架构都为时钟提供有专用资源。掌握 FPGA 架构中的时钟资源,使您能够规划好自己的时钟,从而实现时钟 资源的最佳利用。大多数设计无需您了解这些细节。但如果您能够控制布局,同时对每个时钟域上的扇出有良好的思 路&a…...
git项目提交步骤(简洁版)
1.创建仓库 2.填写 信息 3.点击这个按钮 4.找到要上传的文件,在目录内右键点击 5.依次执行命令 在命令窗口中输入:git init 复制仓库地址: 在命令窗口中输入:git remote add origin 仓库地址 在命令窗口中输入:…...
Jmeter-压测时接口如何按照顺序执行
Jmeter-压测时接口如何按照顺序执行-临界部分控制器 在进行压力测试时,需要按照顺序进行压测,比如按照接口1、接口2、接口3、接口4 进行执行 查询结果是很混乱的,如果请求次数少,可能会按照顺序执行,但是随着次数增加…...
模式识别-Ch5-线性判别函数
Ch5 线性判别函数 文章目录 Ch5 线性判别函数引言:生成模型 vs判别模型生成模型 vs 判别模型判别模型分类 线性判别函数与决策面线性判别函数两类情况下的决策多类问题下决策 多类情形-线性机器线性决策面优缺点 广义线性判别函数例:二次判别函数例1: 1-…...
数据结构二叉树-C语言
数据结构二叉树-C语言 1.树1.1树的概念与结构1.2树的相关术语1.3树的表示1.4树形结构实际运用场景 2.二叉树2.1概念与结构2.2特殊的二叉树2.2.1满二叉树2.2.2完全二叉树 2.3二叉树存储结构2.3.1顺序结构2.3.2链式结构 3.实现顺序结构的二叉树4.实现链式结构二叉树4.1前中后序遍…...
字节小米等后端岗位C++面试题
C 基础 引用和指针之间的区别?堆栈和堆中的内存分配有何区别?存在哪些类型的智能指针?unique_ptr 是如何实现的?我们如何强制在 unique_ptr 中仅存在一个对象所有者?shared_ptr 如何工作?对象之间如何同步…...
IOS HTTPS代理抓包工具使用教程
打开抓包软件 在设备列表中选择要抓包的 设备,然后选择功能区域中的 HTTPS代理抓包。根据弹出的提示按照配置文件和设置手机代理。如果是本机则会自动配置,只需要按照提醒操作即可。 iOS 抓包准备 通过 USB 将 iOS 设备连接到电脑,设备需解…...
renben-openstack-使用操作
管理员操作 (1)上传一个qcow2格式的centos7镜像 (2)管理员------>云主机类型------>创建云主机类型 名称:Centos7 VCPU数量:1 内存: 1024 根磁盘: 10G 其他的默认 点击创建云主机类型即可 界面会显示如下 创建公网络 (1)创建…...
HOW - Form 表单确认校验两种模式(以 Modal 场景为例)
目录 一、背景二、具体1. 模式一:点击确认进行校验提示2. 模式二:确认按钮依赖于表单内容实现说明 一、背景 基于react、antd form分别实现如下两种模式: 1、一个 Modal,点击确认进行校验提示2、一个 Modal,确认按钮…...
MATLAB算法实战应用案例精讲-【数模应用】图像边缘检测(附MATLAB和python代码实现)(二)
目录 前言 算法原理 相关概念 二值图像、灰度图像、彩色图像 邻接性、连通性 图像滤波 频率 滤波器 边缘检测算子:Sobel算子、Scharr算子、Laplacian算子、Canny算子 梯度计算 + 顶帽 + 黑帽 + 拉普拉斯金字塔 相位一致性(Phase Congruency,PC) 几种常见的算法…...
高考日语听力中常考2大类关键词
高考日语听力中,有些关键词的出现频率很高,同学们掌握这些关键词的读音和意思,可以提高听力答题的正确率,如时间类、地点类、天气类关键词……本文档为大家整理了干货,高考日语听力常考关键词,帮助同学们区分和积累常用词汇,记得要持续关注哦! 时间类关键词 1.星期 ∙…...
windows和linux的抓包方式
1.实验准备: 一台windows主机,一台linux主机 wireshark使用: 打开wireshark,这些有波动的就代表可以有流量经过该网卡,选择一张有流量经过的网卡 可以看到很多的流量,然后可以使用过滤器来过滤想要的流量…...
工业 4G 路由器赋能远程医疗,守护生命线
在医疗领域,尤其是偏远地区的医疗救治场景中,工业 4G 路由器正发挥着无可替代的关键作用,宛如一条坚韧的 “生命线”,为守护患者健康持续赋能。 偏远地区医疗资源相对匮乏,常常面临着专业医生短缺、诊疗设备有限等困境…...
《太阳之子》Build16524106官方中文学习版
《太阳之子》官方中文版https://pan.xunlei.com/s/VODabFuJ5gA7rCUACMulT5YGA1?pwdc47e# 集战术狙击、解谜与轻度潜行要素于一身,呈现独一无二的第三人称射击游戏体验。每关你只有一发子弹,但你可以进行在命中时重新瞄准、绕过障碍物、加速击穿护甲等操…...
shell-条件判断
目录 一、条件判断 1.按照文件类型进行判断 2.按照文件权限进行判断 3.两个文件之间进行比较 4.两个整数之间进行比较 5.字符串的判断 6.多重条件判断 二、if条件判断 1.单分支if条件语句 2.双分支if条件语句 (1)判断某文件是否存在 &#x…...
【TI毫米波雷达】DCA1000不使用mmWave Studio的数据采集方法,以及自动化实时数据采集
【TI毫米波雷达】DCA1000不使用mmWave Studio的数据采集方法,以及自动化实时数据采集 mmWave Studio提供的功能完全够用了 不用去纠结用DCA1000低延迟、无GUI传数据 速度最快又保证算力无非就是就是Linux板自己写驱动做串口和UDP 做雷达产品应用也不会采用DCA1000的…...
20250110_ PyTorch中的张量操作
文章目录 前言1、torch.cat 函数2、索引、维度扩展和张量的广播3、切片操作3.1、 encoded_first_node3.2、probs 4、长难代码分析4.1、selected4.1.1、multinomial(1)工作原理: 总结 前言 1、torch.cat 函数 torch.cat 函数将两个张量拼接起来,具体地是…...
【ROS2】☆ launch之Python
☆重点 ROS1和ROS2其中一个很大区别之一就是launch的编写方式。在ROS1中采用xml格式编写launch,而ROS2保留了XML 格式launch,还另外引入了Python和YAML 编写方式。选择哪种编写取决于每位开发人员的爱好,但是ROS2官方推荐使用Python方式编写…...