Git常用指令整理【新手入门级】【by慕羽】
Git 是一个分布式版本控制系统,主要用于跟踪和管理源代码的更改。它允许多名开发者协作,同时提供了强大的功能来管理项目的历史记录和不同版本。本文主要记录和整理,个人理解的Git相关的一些指令和用法

文章目录
- 一、git安装 & 创建git仓库
- 二、理解git 文件的三种不同状态和工作模式
- 1. **Git 文件的三种状态**
- 1.1 **已修改(Modified)**
- 1.2 **已暂存(Staged)**
- 1.3 **已提交(Committed)**
- 2. **Git 的工作模式**
- 2.1 **工作区(Working Directory)**
- 2.2 **暂存区(Staging Area)**
- 2.3 **本地仓库(Repository)**
- 3. **Git 的工作流程**
- 三、git基本指令
- 1. **git init**
- 2. **git clone**
- 3. **git add**
- 4. **git commit**
- 5. **git status**
- 6. **git log**
- 7. **git diff**
- 7.1 **git diff 的基本用法(查看工作区 和 暂存区之间的差异)**
- 7.2 **查看暂存区与本地仓库的差异**
- 7. 3 **比较不同提交之间的差异**
- 7.4 **查看特定文件的差异(工作区与暂存区)**
- 7. 5 **比较暂存区与本地仓库中的特定文件的差异**
- 7. 6 **比较分支之间的差异**
- 7.7 **忽略空白字符的差异**
- 7.8 **生成统计信息**
- 7.9 **查看提交的差异**
- 7.10 **查看与远程仓库之间的差异**
- 9. **git ls-files**
- 10. **git rm**
- 11. **git reset**
- 四、git分支管理指令
- 1. **git checkout**
- 1. 1 **切换到本地指定分支**
- 1. 2 **新建本地分支并切换到该分支**
- 2. **git branch**
- 3. **git merge**
- 五、SSH密钥生成及远程仓库配置
- 1. **生成新的 SSH 密钥**
- 2 .**将 SSH 公钥添加到远程仓库平台**
- 3. **测试 SSH 连接**
- 4. **然后就可以在 克隆时使用 SSH URL了**
- 5. **(可选)设置全局用户名和邮箱**
- 六、git远程仓库相关指令
- 1. **git pull**
- 1. 1 **pull基础用法**
- 1. 2 **关于pull冲突**
- 1. 3 **从远程恢复文件**
- 方式 1:重置本地分支的状态,使其与远程仓库的状态完全一致。这会将所有本地删除的文件恢复,回到远程仓库的状态。
- 方式 2:仅恢复特定的文件
- 2. **git push**
- 2. 1 **push基础用法**
- 2. 2 **关于push冲突**
- 3. **git remote**
- 具体来说:
- 3. 1 **git remote -v**
- 3.2 **添加远程仓库**
- 4. **确认分支名称是否正确**
- 4. **git fetch**
一、git安装 & 创建git仓库
可以使用以下指令安装git
sudo apt update
sudo apt install git
可以使用git init在当前目录下创建一个空仓库,也可以使用git clone 从远程仓库clone一个项目
git init
git clone 远程仓库地址
创建仓库时不想放在当前目录下,也可以指定路径
git init 路径
git clone 远程仓库地址 路径
二、理解git 文件的三种不同状态和工作模式
在 Git 中,文件在版本控制的过程中可以处于三种不同的状态:已修改(modified)、已暂存(staged) 和 已提交(committed)。这些状态帮助开发者跟踪文件从修改到保存的过程。我们来详细看看这三种状态以及它们在 Git 工作模式中的作用。
1. Git 文件的三种状态
1.1 已修改(Modified)
定义: 文件已经被修改,但是这些修改还没有被提交到 Git 的版本控制中。
解释: 当你对某个文件进行了更改(比如修改了代码或文档,或者删除、新建了文件等),此时文件处于 “已修改” 状态,但这些改动还没有被添加到暂存区。
实例:
# 修改了文件,但还没有添加到暂存区
vim index.html # 修改文件
git status
此时 git status 会显示 index.html 已被修改,但尚未添加到暂存区。
1.2 已暂存(Staged)
定义: 文件的修改已经添加到暂存区,准备在下一次提交时包含这些修改。
解释: 当你希望把某个文件的改动纳入下一次提交时,使用 git add 将文件添加到暂存区。暂存区可以理解为一个中间状态,记录哪些修改会被包含在下一次提交中。
实例:
git add index.html
git status
此时 index.html 的状态会显示为 Changes to be committed,表示文件的修改已经被暂存,准备提交。
1.3 已提交(Committed)
定义: 文件的修改已经被保存到 Git 本地仓库中,成为项目的永久历史的一部分。
解释: 当你对所有想要提交的文件进行了暂存,并使用 git commit 提交它们后,这些改动会保存到 Git 本地仓库中,文件就处于 “已提交” 状态。
实例:
git commit -m "Updated index.html"
git status
此时所有暂存的文件已被提交,git status 会显示 “nothing to commit, working tree clean”。
2. Git 的工作模式
Git 的工作模式主要通过三个区域来实现,即 工作区(Working Directory)、暂存区(Staging Area 或 Index) 和 本地仓库(Repository)。这三个区域对应着文件的三种状态,并构成了 Git 的工作流。
2.1 工作区(Working Directory)
定义: 工作区是你当前看到的项目文件所在的目录,也是你进行代码编辑的地方。
解释: 当你克隆一个 Git 仓库或初始化一个新仓库时,工作区就是文件的实际存储和修改的地方。工作区中的文件可以是未修改的,也可以是已修改的。
实例:
git clone https://github.com/user/repo.git
repo 仓库会被克隆到你的本地系统,此时你所看到的文件就是工作区的内容。
2.2 暂存区(Staging Area)
定义: 暂存区是一个虚拟区域,保存着你打算在下次提交时记录的更改。
解释: 当你使用 git add 时,修改过的文件就会进入暂存区。暂存区可以理解为一个准备提交的列表,Git 将会根据暂存区的内容生成新的提交。
实例:
git add index.html
此时,index.html 的更改就被保存到暂存区中,等待提交。
2.3 本地仓库(Repository)
定义: 本地仓库是 Git 真正保存提交历史的地方,它包含了所有提交的记录。
解释: 当你执行 git commit 时,暂存区的内容会被保存到本地仓库中,成为项目历史的一部分。本地仓库通过 .git 目录来存储这些信息。
实例:
git commit -m "Updated index.html"
这会把暂存区中的文件提交到本地仓库,成为版本历史的一部分。
3. Git 的工作流程
Git 的工作流程大致如下:
-
修改文件: 当你在工作区修改文件时,文件会处于 “已修改” 状态。你可以用
git status查看哪些文件发生了变化。 -
暂存文件: 使用
git add命令将已修改的文件添加到暂存区。此时文件处于 “已暂存” 状态,准备提交。 -
提交文件: 使用
git commit命令将暂存区的文件提交到本地仓库,文件进入 “已提交” 状态,成为项目的一部分。 -
推送到远程仓库(可选): 如果项目与远程仓库(如 GitHub)同步,还可以使用
git push将本地的提交推送到远程仓库中。

三、git基本指令
1. git init
功能: 初始化一个新的 Git 仓库。
用法:
git init
解释: 在当前目录中初始化一个新的 Git 仓库。这会创建一个 .git 目录,其中包含所有版本控制的信息。
实例:
mkdir my_project
cd my_project
git init
在 my_project 文件夹中初始化一个新的 Git 仓库。
2. git clone
功能: 克隆一个现有的 Git 仓库。
用法:
git clone <repository_url>
解释: 将远程仓库的内容克隆到本地。远程仓库可以是 GitHub、GitLab 等平台上的项目。
实例:
git clone https://github.com/user/repo.git
上述指令将 https://github.com/user/repo.git 仓库克隆到本地。
如果想要使用 Git 克隆远程仓库的某个特定分支,可以通过 git clone 命令的 -b(或 --branch)选项来实现。这个命令允许你指定克隆远程仓库时仅获取某个特定分支,而不是默认的 main 或 master 分支。
git clone -b <branch_name> <repository_url>
-b <branch_name>: 指定要克隆的分支名称。<repository_url>: 远程仓库的地址(如 GitHub、GitLab 或其他 Git 服务器的仓库 URL)。
假设你要从 GitHub 仓库 https://github.com/user/repo.git 克隆分支 feature-branch,可以执行以下命令:
git clone -b feature-branch https://github.com/user/repo.git
3. git add
功能: 将文件添加到暂存区(staging area)。
将制定文件添加到暂存区:
git add 文件名
当前目录中的所有更改添加到暂存区::
git add .
实例:
git add index.html
git add .
以上两条指令分别表示将 index.html 文件、当前目录中的所有更改 添加到暂存区。
4. git commit
功能: 提交暂存区的内容到本地仓库。
用法:
git commit -m "相关说明"
解释: 将暂存区的更改提交到本地仓库。-m 选项允许直接提供提交说明,未提供时将打开编辑器强制输入说明。
实例:
git commit -m "Initial commit"
提交带有说明 Initial commit 的更改。
由本文第二部分的介绍可知,对工作空间内的文件修改后,需要先使用git add 指令将修改保存到暂存区,然后再使用git commit指令,将修改提交到本地仓库,也可以直接使用以下指令合并以上操作,即自动将修改保存到暂存区,并提交到本地仓库
git commit -am "相关说明"
5. git status
功能: 显示工作区和暂存区的状态。
用法:
git status
解释: 显示哪些文件被修改但未添加到暂存区,哪些文件在暂存区等待提交,以及哪些文件未被 Git 跟踪。
6. git log
功能: 显示项目的提交历史。
用法:
git log
git log --oneline
git log --graph --oneline
解释: 列出所有提交的记录。可以添加选项简化输出,--oneline 显示每次提交的一行简要信息,--graph 以图表形式显示分支和合并历史。
实例:
git log --oneline --graph
查看简化的提交历史和项目的分支结构。
7. git diff
git diff 是 Git 中用于比较文件改动的一个非常强大的命令。它可以显示工作区、暂存区或已经提交的文件之间的差异,帮助开发者了解当前的更改细节。
7.1 git diff 的基本用法(查看工作区 和 暂存区之间的差异)
git diff
解释: 这个命令显示工作区中已修改但尚未暂存的文件与最新提交(HEAD)版本之间的差异。简而言之,git diff 展示的是 工作区 和 暂存区 之间的差异。
实例:
假设你修改了 index.html 文件,但还没有使用 git add 将其添加到暂存区:
git diff
输出会显示 index.html 文件的具体改动,比如哪些行被修改、添加或删除。
7.2 查看暂存区与本地仓库的差异
git diff --staged
或
git diff --cached
解释: 显示暂存区与最新提交版本(HEAD)的差异。这里的最新提交版本是本地仓库中当前分支的最新提交
实例:
git add index.html
git diff --staged
在 git add 之后运行这个命令,显示 index.html 文件的暂存区和提交之间的差异。
7. 3 比较不同提交之间的差异
git diff <commit1> <commit2>
解释: 比较两个提交之间的差异,显示它们的改动情况。
实例:
git diff abc1234 def5678
这个命令比较提交 abc1234 和 def5678 之间的所有差异,输出这些提交间文件的更改情况。你可以通过提交哈希值或分支名称来指定不同的提交。
7.4 查看特定文件的差异(工作区与暂存区)
git diff <file_name>
解释: 显示工作区中指定文件的差异,适用于查看某个文件的具体修改内容。
实例:
git diff index.html
显示 index.html 文件的更改情况。
7. 5 比较暂存区与本地仓库中的特定文件的差异
git diff --staged <file_name>
实例:
git add index.html
git diff --staged index.html
显示 index.html 文件暂存区和最新提交之间的差异。
7. 6 比较分支之间的差异
git diff <branch1> <branch2>
解释: 比较两个分支之间的差异,显示这两个分支所做的不同更改。
实例:
git diff main feature-branch
显示 main 分支和 feature-branch 分支之间的改动。
7.7 忽略空白字符的差异
有时,代码格式的改变(如空白字符的变化)可能会造成不必要的差异显示。使用 -w 选项可以忽略空白字符的变化。
git diff -w
实例:
git diff -w index.html
忽略 index.html 文件中的空白字符差异,仅显示实际内容的变化。
7.8 生成统计信息
git diff --stat
解释: 生成一份简洁的文件改动统计信息,而不显示具体的改动内容。
实例:
git diff --stat
输出结果会显示每个文件的改动情况,包括新增和删除的行数。例如:
index.html | 4 +++-style.css | 3 +++2 files changed, 7 insertions(+), 1 deletion(-)
7.9 查看提交的差异
git diff <commit>
解释: 查看当前工作区和某个特定提交之间的差异。
实例:
git diff HEAD
显示当前工作区和最后一次提交(HEAD)之间的差异。
7.10 查看与远程仓库之间的差异
git diff <branch> <remote>/<branch>
解释: 查看本地分支与远程分支之间的差异。
实例:
git diff main origin/main
显示本地 main 分支和远程仓库 origin 的 main 分支之间的差异,帮助你了解本地与远程的不同步情况。
9. git ls-files
git ls-files 是 Git 中一个非常有用的命令,用来列出 Git 仓库中的文件。它可以帮助你查看哪些文件已经被 Git 跟踪,或者根据特定的条件过滤文件。
git ls-files
解释: 该命令显示当前 Git 仓库中所有已经被跟踪的文件。这些文件是指那些已经通过 git add 添加到 Git 的版本控制系统并且不在 .gitignore 列表中的文件。
10. git rm
git rm 是 Git 中用于删除文件的命令,它不仅会在文件系统中删除指定的文件,还会将删除操作记录在 Git 的暂存区,以便在下一次提交时将该删除记录保存到版本控制系统中。
git rm <file>
解释: 该命令会从工作区和暂存区中删除指定的文件。删除后,文件将不再受到 Git 的版本控制,并且在下一次 git commit 时删除记录将被提交。
实例:
git rm index.html
git commit -m "Remove index.html"
这将删除 index.html 文件,并提交删除操作到仓库。
11. git reset
版本回退到上一个版本:
git reset --hard HEAD^ 是一个 Git 命令,常用于将当前分支的最新一次提交回退到它的前一个提交,同时丢弃所有工作区和暂存区中的更改。它会彻底清理当前分支的状态,回到指定的提交,并且未提交的所有改动将不可恢复。
git reset --hard HEAD^
版本往回退m个版本:
其中m是回退的版本个数
git reset --hard HEAD~m
回退或前进到指定版本:
git reset --hard 版本标识
可以使用git reflog查看所有改动的标识

四、git分支管理指令
1. git checkout
1. 1 切换到本地指定分支
功能: 切换分支或恢复文件。
用法:
git checkout 分支名
git checkout <commit_hash>
git checkout -- <file_name>
解释: 切换到指定分支,或者将文件恢复到指定的提交版本。-- 用于恢复工作区的文件到最新的暂存状态。
实例:
git checkout feature-branch
git checkout 3a6b8c1
git checkout -- index.html
以上三条示例分别表示切换到 feature-branch 分支,回滚到提交 3a6b8c1,恢复 index.html 文件。
1. 2 新建本地分支并切换到该分支
git checkout -b 新的分支名
2. git branch
功能: 查看、创建或删除分支。
用法:
git branch
git branch <new_branch>
git branch -d <branch_name>
解释: git branch 列出所有本地分支,并且标*号的是当前分支,git branch <new_branch> 创建新分支,-d 删除分支。
实例:
git branch feature
git branch -d feature
创建名为 feature 的分支,之后删除该分支。
以下指令可以查看远程仓库的所有分支
git branch -r
3. git merge
功能: 合并分支。
用法:
git merge <branch_name>
解释: 将指定的分支合并到当前分支。
实例:
git checkout main
git merge feature-branch
将 feature-branch 合并到 main 分支。
关于合并冲突:
合并的时候,最大的难点就是冲突了,合并并不仅仅是简单的文件添加、移除的操作,Git 也会合并修改,如果我们在两个分支中同时修改了同一个文件,这时再合并,就可能会产生冲突,冲突并不可怕,可怕的是要怎样去解决,一般是根据实际的需求来选择保留那个,或者兼顾等
五、SSH密钥生成及远程仓库配置
1. 生成新的 SSH 密钥
可以使用以下命令生成一个新的 SSH 密钥对。
命令:
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
或:
ssh-keygen -t rsa -C "your_email@example.com"
解释:
-t rsa: 指定生成的密钥类型为 RSA。-b 4096: 指定密钥长度为 4096 位。-C "your_email@example.com": 添加一个注释,一般使用你的邮箱作为标识。
执行后:
系统会提示你输入密钥保存的路径和文件名,默认保存在 ~/.ssh/id_rsa。也会提示是否为密钥设置一个密码,按需选择。

2 .将 SSH 公钥添加到远程仓库平台
SSH 公钥存储在 ~/.ssh/id_rsa.pub 中。下一步是将该公钥复制并添加到远程仓库平台(如 GitHub、GitLab)。
可以使用以下命令输出SSH公钥的内容进行复制,也可以按照上图生成密钥时,提示的输出路径,找到并打开生成的id_rsa.pub文件,复制里面的内容:
cat ~/.ssh/id_rsa.pub
复制完成后,进入 GitHub 或 GitLab 的设置页面,找到 SSH and GPG keys(GitHub)或 SSH Keys(GitLab),并将公钥粘贴进去。这里以GIthub远程仓库为例,在Github设置的SSH keys项中,添加复制的内容,如下图所示
- GitHub: GitHub SSH Key 设置
- GitLab: GitLab SSH Key 设置

3. 测试 SSH 连接
配置完成后,可以使用以下命令测试与 GitHub 或 GitLab 的 SSH 连接是否成功:
命令:
ssh -T git@github.com
或:
ssh -T git@gitlab.com
解释: 尝试通过 SSH 连接到 GitHub 或 GitLab。如果连接成功,会看到类似 Hi username! You've successfully authenticated... 的提示信息。
注:@ 后面的是远程仓库的地址

4. 然后就可以在 克隆时使用 SSH URL了
为了确保 Git 使用 SSH 进行连接,在克隆远程仓库时推荐使用 SSH URL 格式:
命令(示例):
git@github.com:JZX-MY/gittest.git
解释: 使用 SSH URL 克隆仓库,而不是 HTTPS URL(https:// 格式)。这种方式不会要求每次操作时输入用户名和密码。
5. (可选)设置全局用户名和邮箱
虽然这不是 SSH 相关的命令,但为了使 Git 的提交记录保持一致,建议设置全局的用户名和邮箱。
命令:
git config --global user.name "Your Name"
git config --global user.email "your_email@example.com"
六、git远程仓库相关指令
1. git pull
1. 1 pull基础用法
功能: 从远程仓库拉取最新更改并合并。
用法:
git pull 远程仓库在本地的名字 远程仓库的分支
解释: 从指定的远程仓库和分支拉取最新更改并自动合并到当前分支。注意,这里的远程仓库在本地的名字可以使用git remote -v查看,如果没有配置,需要使用git remote add指令进行配置,详情见本小节的3,git remote指令的介绍
实例:
git pull origin main
从远程仓库 origin 的 main 分支拉取最新更改。
注意: git pull 相当于git fetch 与git merge的组合,在git merge时 可能需要给定合并说明,如果不想要执行git pull后强制进入编辑器 编辑合并说明,可以在后面加上–no-edit
git pull 远程仓库在本地的名字 远程仓库的分支 --no-edit
注意: nano编辑器可按Ctrl+X键退出编辑模式
1. 2 关于pull冲突
如果从远程仓库拉取后,在本地修改了文件A,且远程仓库中的另一个文件B被修改,此时,使用git pull指令,可以把远程仓库中文件B的修改更新到本地仓库,且本地仓库中修改的文件A的内容并不会被覆盖,此时使用git status指令,会提示本地仓库的分支领先于远程的分支,即该情况并不会产生pull冲突

如果从远程仓库拉取后,在本地修改了文件A,且远程仓库中文件A的相同行处被也其他人修改,此时,使用git pull指令,就会产生pull冲突。

此时git 无法自动完成合并。我们需要手动解决这些冲突(编辑本地的冲突文件,视具体情况处理),然后使用git add和git commit 提交合并的结果。

1. 3 从远程恢复文件
当我们使用git pull从远程仓库拉取了一个项目到本地仓库,然后在本地仓库通过键盘上的delete键删除了一个文件,并提交到了本地仓库,此时,我再次使用git pull从远程仓库拉取该项目到本地,会显示当前已经是最新的了,并不能通过这种方式恢复被我们删除的文件

原因分析:
当我们最初使用 git pull 从远程仓库拉取了项目,并将它同步到本地。这意味着此时你的本地分支与远程分支是同步的。然后,我们在本地删除了一个文件,并使用 git commit 提交了这次删除操作。这会将文件删除记录提交到本地仓库,但还没有推送到远程仓库。当我们再次运行 git pull origin master 时,Git 会检查远程仓库的状态,发现远程仓库的 master 分支没有新的提交,因此显示“已经是最新的”。(尽管本地仓库已经与远程仓库不同了)
此时,我们可以使用以下方法进行恢复
方式 1:重置本地分支的状态,使其与远程仓库的状态完全一致。这会将所有本地删除的文件恢复,回到远程仓库的状态。
git reset --hard 远程仓库的本地名/远程仓库的分支名
解释:
--hard:将本地分支、暂存区和工作区都重置到远程仓库的最新状态,这意味着所有未提交的更改都会被丢弃,完全同步到远程分支的状态。- 如果你已经提交了删除操作,这个命令会恢复被删除的文件,因为它会重置到远程仓库最新的提交。
注意: 使用 --hard 选项会丢失所有本地的未提交更改,务必谨慎。
方式 2:仅恢复特定的文件
如果你只想恢复某个特定文件而不是所有文件,可以通过以下命令从远程仓库恢复该文件。
git checkout 远程仓库的本地名/远程仓库的分支名 -- <file_path>
解释:
git checkout 远程仓库的本地名/远程仓库的分支名 -- <file_path>:从远程仓库的远程仓库的分支名分支恢复指定的文件,并将其放到本地工作区。<file_path>:你想要恢复的文件的路径。
实例:
如果你删除了 config.json 文件,想从远程恢复这个文件:
git checkout origin/master -- config.json
这个命令会将远程仓库中最新版本的 config.json 恢复到你的本地工作区。
恢复文件后,你需要重新提交这些文件,使得删除的文件在本地被恢复,并且可以推送到远程仓库。
git add <file_path>
git commit -m "Restore deleted file"
2. git push
2. 1 push基础用法
功能: 将本地提交推送到远程仓库。
用法:
git push 远程仓库在本地的名字 远程仓库的分支
解释: 将当前分支的提交推送到远程仓库中的指定分支。
实例:
git push origin main
2. 2 关于push冲突
与pull冲突类似,如果在本地仓库中对文件A进行了修改,另一个人对远程仓库中的文件A也进行了修改,此时使用git push将本地仓库推送到远程就会产生冲突,更新到远程被拒绝

此时,我们需要手动解决这些冲突,需要先使用git pull 拉取远程分支的最新内容,然后视具体情况,编辑本地的冲突文件来解决冲突,然后使用git add和git commit 提交合并的结果。最后,再使用git push提交到远程

3. git remote
功能: 管理远程仓库。
用法:
git remote -v
git remote add <name> <url>
git remote rm <name>
解释: git remote -v 显示所有远程仓库的详细信息,add 添加新的远程仓库,rm 删除远程仓库。
实例:
git remote add origin https://github.com/user/repo.git
git remote rm origin
添加或删除名为 origin 的远程仓库。
具体来说:
3. 1 git remote -v
该命令将列出你的远程仓库列表:
git remote -v
这个命令会列出所有配置的远程仓库及其对应的 URL。如果没有你想要的远程仓库,说明你还没有配置它。如下图中例子所示,远程仓库git@github.com:JZX-MY/gittest.git在本地的名字为origin

3.2 添加远程仓库
如果发现远程仓库没有被配置,你可以使用以下命令添加远程仓库:
git remote add 设定远程仓库在本地的名字 远程仓库地址

4. 确认分支名称是否正确
确保你要拉取的分支名 newb 存在。如果该分支名有误,你可以使用以下命令查看所有远程分支:
git branch -r
4. git fetch
功能: 从远程仓库获取最新更新,但不自动合并。
用法:
git fetch <remote>
解释: 从远程仓库获取最新的更改,但不会合并到当前分支,允许开发者手动查看和处理这些更改。
实例:
git fetch origin
从远程仓库 origin 获取最新的更新。

相关文章:
Git常用指令整理【新手入门级】【by慕羽】
Git 是一个分布式版本控制系统,主要用于跟踪和管理源代码的更改。它允许多名开发者协作,同时提供了强大的功能来管理项目的历史记录和不同版本。本文主要记录和整理,个人理解的Git相关的一些指令和用法 文章目录 一、git安装 & 创建git仓…...
记某学校小程序漏洞挖掘
前言: 遇到一个学校小程序的站点,只在前端登录口做了校验,后端没有任何校验,奇葩弱口令离谱进去,站点里面越权泄露敏感信息,接管账号等漏洞!!! 渗透思路 1.绕过前端 …...
腾讯百度阿里华为常见算法面试题TOP100(3):链表、栈、特殊技巧
之前总结过字节跳动TOP50算法面试题: 字节跳动常见算法面试题top50整理_沉迷单车的追风少年-CSDN博客_字节算法面试题 链表 160.相交链表...
Apache CVE-2021-41773 漏洞复现
1.打开环境 docker pull blueteamsteve/cve-2021-41773:no-cgid docker run -d -p 8080:80 97308de4753d 2.访问靶场 3.使用poc curl http://47.121.191.208:8080/cgi-bin/.%2e/.%2e/.%2e/.%2e/etc/passwd 4.工具验证...
vue-入门速通
setup是最早的生命周期,在vue2里边的data域可以使用this调用setup里面的数据,但是在setup里边不能使用thisvue项目的可执行文件是index,另外运行前端需要npm run vue的三个模块内需要三个不同的结构,里边放置js代码,注…...
【AI大模型】通义大模型API接口实现
目录 一、基础环境安装 (一)OpenAI Python SDK安装 (二)DashScope SDK安装 二、OPENAI接口实现 (一)文本输入 (二)流式输出 (三)图像输入 ࿰…...
CVPR最牛图像评价算法!
本文所涉及所有资源均在 传知代码平台可获取。 目录 概述 一、论文思路 1.多任务学习框架: 2.视觉-语言对应关系: 3.动态损失权重: 4.模型优化和评估: 二、模型介绍 三、详细实现方法 1.图像编码器和语言编码器(Image…...
Spring源码-从源码层面讲解传播特性
传播特性:service:REQUIRED,dao:REQUIRED 两个都是required使用的是同一个事务,正常情况,在service提交commit <tx:advice id"myAdvice" transaction-manager"transactionManager"><tx:attributes&…...
Rust调用tree-sitter解析C语言
文章目录 一、Rust 调用 tree-sitter 解析 C 语言代码1. 设置 Rust 项目2. 添加 tree-sitter 依赖3. 编写 Rust 代码4. 运行程序5. 编译出错 二、解决步骤1. 添加 tree-sitter 构建依赖2. 添加 tree-sitter-c 源代码3. 修改 build.rs 以编译 tree-sitter-c 库4. 修改 Cargo.tom…...
奇瑞汽车—经纬恒润 供应链技术共创交流日 成功举办
2024年9月12日,奇瑞汽车—经纬恒润技术交流日在安徽省芜湖市奇瑞总部成功举办。此次盛会标志着经纬恒润与奇瑞汽车再次携手,深入探索汽车智能化新技术的前沿趋势,共同开启面向未来的价值服务与产品新篇章。 面对全球汽车智能化浪潮与产业变革…...
vue3 TagInput 实现
效果 要实现类似于下面这种效果 大致原理 其实是很简单的,我们可以利用 element-plus 组件库里的 el-tag 组件来实现 这里我们可以将其抽离成一个公共的组件,那么现在有一个问题就是通讯问题 这里我们可以利用父子组件之间的通讯,利用 v-model 来实现,父组件传值,子组…...
mysql中的json查询
首先来构造数据 查询department里面name等于研发部的数据 查询语句跟普通的sql语句差不多,也就是字段名要用到path表达式 select * from user u where u.department->$.name 研发部 模糊查询 select * from user u where u.department->$.name like %研发%…...
Etcd权限认证管理
1 查看是否开启权限认证 ctl auth status 2 开启权限认证 ctl auth enable。开启后每一条命令都要加上用户 --userroot:root(root默认最高权限) 3 创建其他用户 ctl user add user1 --user用户名:密码 4 创建角色 ctl role add testR --user 5 为角色添加权限 ctl role g…...
图文组合商标部分驳回后优化后初审通过!
这几天以前有个企业的商标初审下来了,以前是加了图形个别部分没有通过初审,后面是把图形去掉重新用文字申请下来初审。 图形与文字同时申请,会分别审查有一个元素过不了,整体就会过不了,所以平常就会建议分开申请注册商…...
【最新华为OD机试E卷-支持在线评测】爱吃蟠桃的孙悟空(100分)多语言题解-(Python/C/JavaScript/Java/Cpp)
🍭 大家好这里是春秋招笔试突围 ,一枚热爱算法的程序员 💻 ACM金牌🏅️团队 | 大厂实习经历 | 多年算法竞赛经历 ✨ 本系列打算持续跟新华为OD-E/D卷的多语言AC题解 🧩 大部分包含 Python / C / Javascript / Java / Cpp 多语言代码 👏 感谢大家的订阅➕ 和 喜欢�…...
BUUCTF [SCTF2019]电单车详解两种方法(python实现绝对原创)
使用audacity打开,发现是一段PT2242 信号 PT2242信号 有长有短,短的为0,长的为1化出来 这应该是截获电动车钥匙发射出的锁车信号 0 01110100101010100110 0010 0前四位为同步码0 。。。中间这20位为01110100101010100110为地址码0010为功…...
Apache James配置连接达梦数据库
项目场景: Apache James配置连接达梦数据库,其他配置中不存在的数据库也可参考此方案。 配置步骤 1、把需要的jar包导入到James 把DmJdbcDriver18.jar复制到下面lib目录下 james-2.3.2\lib 2、 修改连接配置 james-2.3.2\apps\james\SAR-INF\confi…...
Java实现栈
一、栈Stack 1.1 概念 一种特殊的线性表,只允许在固定的一段进行插入和删除元素操作。进行数据的插入和删除操作的一段称为栈顶,另一端称为栈低。栈中的元素遵循后进先出 LIFO(Last In First Out)的原则。 进栈 出栈 举例:在word中…...
数据结构—栈
栈 概念 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。 压栈:栈…...
服务设计原则介绍
在Java或任何软件开发中,设计服务时遵循一些核心原则是非常重要的,这些原则不仅有助于构建高质量、可维护的软件系统,还能提高系统的可扩展性和可重用性。以下是一些关键的服务设计原则: 单一职责原则(SingleResponsib…...
IDEA运行Tomcat出现乱码问题解决汇总
最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...
测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...
MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...
系统设计 --- MongoDB亿级数据查询优化策略
系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序
一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...
(转)什么是DockerCompose?它有什么作用?
一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器。 Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...
