【Git Bash】简明从零教学

目录

  • Git 的作用
    • 官网介绍
    • 简明概要
  • Git 下载链接
  • Git 的初始配置
    • 配置用户
    • 初始化本地库
  • Git 状态查询
  • Git 工作机制
    • 本地工作机制
    • 远端工作机制
  • Git 的本地管理操作
    • add 将修改添加至暂存区
    • commit 将暂存区提交至本地仓库
    • 日志查询
    • 版本穿梭
  • Git 分支
    • 查看分支
    • 创建与切换分支
    • 跨分支修改与合并
    • 合并冲突
  • Git 的远端操作
    • 与远端建立连接
    • SSH 秘钥协议
    • 远端的推送与拉取

Git 的作用

官网介绍

Git 作为一个免费的、开源的分布式 版本控制系统,可以高效地处理包括轻量、重量级在内的各种项目。Git 有廉价的本地库,方便的暂存区域和多个工作流分支等特性。

简明概要

同一项目 Project 在开发过程中可能出现形如 Project_20230616_byLeeProject_20230617_byMaProject_20230630_backUpProject_20230701_rollBackOn0617Project_20230701_modifiedProject_20230703_finalByMa 等多个协同开发者版本、多个备份版本、跨版本回滚修改、跨协同开发者打包拷贝的混乱情况。为避免此,我们需要利用 Git 的如下特性:

  • 管理本地(客户端)项目资源

记录文档修改内容新建项目版本号、分支(branch) 等。开发者为避免项目开发出现致命错误而无法回退到最近一次可行现场,有时会对上一可靠版本进行拷贝备份,但这样操作会开发过程中出现多个备份,占用了大量的存储空间。为此,Git 管理应运而生。

  • 将本地项目资源与远端代码托管中心(服务端)进行互联

开发者可将本地资源推送(push)上传至远端进行云备份,同时多个开发者也可对此云项目进行拷贝(copy)、下拉(pull)至本地进行异地多分支开发,经合并(merge)后推送至远端主分支。常见的远端有 GitHubTencent CODING DevOps 等。

  • 为 Windows OS 提供 Linux 系统命令行的交互终端

在 Windows cmd 下无法执行 mkdirlstouchvimcprm 等常用 Linux 指令,但在 Git Bash Terminal 的帮助下可以实现此类交互。

Git 下载链接

官方地址:https://git-scm.com/
Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency.

Git 的初始配置

在这里插入图片描述
定位到项目文件夹,右击鼠标在菜单栏选择 Git Bash Here,进入Terminal。并键入:

git -v
git -h

以查看已安装的 Git 版本号和帮助文档,检验是否安装成功。

在这里插入图片描述

注意,Git Terminal 的复制快捷键为 ctrl + insert ,粘贴快捷键为 shift + insert

配置用户

首先需为本台设备上的开发者配置 用户名邮箱 等信息,用于记录项目各版本下的 录入人签名 以区分不同操作者身份,以及用于后续的 远端识别

如某一项目分居实验室、寝室两地开发,我们可以将实验室设备用户名命为 my-lab,将寝室设备用户名命为 my-laptop,这样可以在改项目回滚时确定某一功能块的修改者。

  • 配置用户名
git config --global user.name "your name"
  • 配置用户邮箱
git config --global user.email "youremail@github.com"

如果读者想要在后续的远端部分使用 GitHub 作为资源库,建议用户名、邮箱与 GitHub 注册信息统一,以便管理。但二者并无必然联系。

  • 查看已配置的用户信息
cat ~/.gitconfig

在这里插入图片描述

初始化本地库

现在采用如下指令在当前项目目录下建立一个 git 本地库:

git init
ls ./.git

执行完毕后,可以看到本地的项目目录文件夹内出现了一个名为 .git 的隐藏文件夹,内部存有一些配置信息,如索引、提交记录等。

在这里插入图片描述

Git 状态查询

Git 可记录当前项目的各个版本号以及其对应的修改记录,并支持回滚。Git 目前的状态可通过如下指令进行查询:

git status

在这里插入图片描述

截至目前,由于文件夹内没有增删文件、修改文件内容的操作发生,所以 Terminal 自然会显示 no commits yet。我们现在创建一个新的文档并命名为 test.txt,作为轻量级的项目示例。(如果读者已经拥有现成项目并知悉项目变动,可跳转至下一小节。)

在这里插入图片描述
创建好 test.txt 后,再次执行状态查询指令,我们发现 Terminal 中输出了未被追踪文件(Untracked files),并被标记为了红色。

test.txt 作为新建的文件,与 Git 中记录中 版本历史仓库 出现的文件目录,和当前的 暂存区 中出现的文件目录存在冲突,所以被标记为了红色。后续开发者需要将 test.txt 添加(add)至 暂存区 并提交(commit)至 版本历史仓库,才可在 Git 中完成记录。后面的章节会提到其工作机制以及操作细节。

Git 工作机制

Git 的工作流如图所示,框内部分为本地工作机制,框外传递部分为面向远端的工作机制:
git 的工作流

本地工作机制

在项目的当前 工作目录(Workspace) 下,开发者进行编写、新建、删除文件或文件内容。对于已修改的文件目录或者文件内容,开发者可以将其添加(add)至 暂存区(stage),在所有标红提示的 未被追踪文件 完成添加后,我们再一并将它们提交(commit)至 本地的版本历史仓库(Local Repository) 中。

远端工作机制

如第一节中提到的 Git 作用,开发者可以将 本地仓库 推送(push)到位于 GitHub 的 远端仓库(Remote Repository) 作为代码托管;将 远程仓库 的分支最新内容完全拉取(pull)至本地 工作目录 并与当前本地分支直接合并,或将 远程仓库 的分支最新内容拿取(fetch)至 本地仓库 但不做合并。

Git 的本地管理操作

如状态查询和工作机制章节中提到的情景,我们需要做出一些操作,来使得 Git 记录下本地的所有修改。同时需支持对修改记录的日志进行查询,以完成项目的版本穿梭。

以下是一些常用的 Git 本地管理相关命令:

指令作用
1git add <pathspec>将文件 pathspec 添加至暂存区
2git commit -m <message>提交本次修改并做 message 批注
3git reflog查看各提交的引用日志
4git log查看各提交的日志
5git reset --hard <reflog>穿梭(回滚)到 reflog 对应的项目版本

add 将修改添加至暂存区

通过指令 git add <pathspec>,我们可以添加 git status 中被标红的 未被追踪文件 至暂存区,如:

git add test.txt
git status

再次查看 git status,可以发现该文件已被标记为绿色。

在这里插入图片描述

键入 tab 可自动补全子目录名。

commit 将暂存区提交至本地仓库

通过指令 git commit -m <message>,我们可以提交暂存区内容至本地仓库,如:

git commit -m "This is my first commit, and a new file is created." test.txt

在这里插入图片描述
现在我们来模拟版本迭代的情况:

在这里插入图片描述

如图所示,当 commit 完成后,我们又对 test.txt 的文件内容进行了修改,添加了两行文字。当同一文件被提交后再次被修改,查看 git status 依然会标记该文件为 未被追踪文件。此时我们需要将该文件再次 add 至暂存区,并进行二次 commit,以完成记录:

git status
git add test.txt
git status
git commit -m "This is my second commit, and the file is modified." test.txt
git status

在这里插入图片描述
操作完成后可发现文件内容修改已被记录,目前的工作区是干净的。

日志查询

  • 命令 git reflog 用于查看当前仓库的引用日志(Reference log):引用日志记录了仓库中分支、标签和 HEAD 移动的历史记录。
  • 命令 git log 用于查看 Git 仓库的提交日志:它显示了每个提交的作者、提交时间、提交信息等。
git reflog
git log

在这里插入图片描述

版本穿梭

Git HEAD 默认指向提交后的最新的版本,通过以下指令修改 Git HEAD 指向的引用版本号,可以进行本地仓库回滚,同时本地工作区也会同步回滚

git reset --hard <reflog>
  • 穿梭到 test.txt 为空时的 the first commit 版本:
    在这里插入图片描述
  • 穿梭到 test.txt 有内容时的 the second commit 版本:
    在这里插入图片描述
    同理,此指令支持多文件项目的版本回滚。

Git 分支

Git 分支(branch) 是一种用于在开发过程中并行工作的功能。它允许开发人员在不影响主分支的同时,与其他人合作开发新的功能或解决问题。在 Git 中,可以创建,切换和合并分支。分支的底层管理逻辑由指针完成,当前视角 HEAD 指向当前分支。
在这里插入图片描述

  • 分支可使得多个开发者 同时且并行 推进各功能开发,提高开发效率;
  • 各分支的修改与开发 不影响已经提交 的代码(如 主分支 master);
  • 各分支的修改内容 可以出现重叠,但提交后合并时需经过冲突判定,并由开发者操作选择最终保留部分;
  • 某一分支出现崩溃或开发失败,不会对其他分支有任何影响,仅在出现问题的分支上做版本穿梭回滚即可。

读者可以跳转至 A successful Git branching model 查看各较为成熟的分支团队开发模型,如在 主分支(master) 可分出 热补丁(hotfix)发布版(release)开发版(develop)特性(feature) 分支供团队各职能部门开发。此文章剩余部分仅对学生常见的多人开发、多地开发场景做示例(如小组作业合作、实验室与寝室跨地开发)。
在这里插入图片描述

以下是一些常用的 Git 分支相关命令:

指令作用
1git branch -v查看各分支
2git branch <new-branch>创建名为 new-branch 的新分支
3git checkout <branch>切换到名为 branch 的分支
4git checkout -b <branch>创建并切换到名为 branch 的分支
5git merge <branch>将名为 branch 的分支合并到 当前 分支上
6git branch -d <branch>删除名为 branch 的分支

查看分支

我们可以使用如下指令来查看本地仓库中包含的 所有开发分支,目前所处的分支将会被 标记为绿色,且在绝对路径后的 括号内 会有当前分支对应的名称标识:

git branch -v

在这里插入图片描述

可以看到当前项目的本地仓库内仅包含一个 主分支(master),我们位于主分支上,且其被标记为了绿色。

创建与切换分支

我们使用如下指令创建一个名为 dev 的新分支,并将视角切换到该分支上:

git branch dev
git checkout dev
git brach -v

此时,当前所处分支 dev 被标记为了绿色,且括号内展示了当前分支的名称标识 (dev)
在这里插入图片描述

跨分支修改与合并

接下来我们在 dev 分支上对 text.txt 的文件内容进行异步修改,将修改结果添加到暂存库,并提交至对应的仓库分支:

此处为了方便演示,修改文本内容可以使用 vim editor,教程可访问 https://www.openvim.com/。我们也可直接在 txt 中进行修改。

git checkout dev
vim test.txt
cat test.txt
git status
git add test.txt
git commit -m "The first commit on branch dev: contents modified."

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

可以发现 dev 分支上的文件内容已发生改变。现在我们将视角切换到主分支 master 上:

git checkout master
cat test.txt

在这里插入图片描述

由于 分支之间的开发进度在合并之前互不影响,可以发现文件内容 又回到了修改之前的状态(the second commit on branch ‘master’)。现在我们将分支 dev 上的修改内容合并到主分支(当前分支):

git checkout master
git merge dev
cat test.txt
git status
git branch -v
git reflog

在这里插入图片描述

至此我们才可以在主分支内看到合并过来的 dev 分支上的修改内容。

注意,dev 分支虽然已经合并到了 master 分支上,但是 dev 分支本身依然存在。修改 master 的内容如果 正确 add 并 commit,则 不会dev 进行 随动修改,同样地,切换到 dev 分支上后进行修改 并正确 add 且 commitmaster 的内容也 不会随动修改。如果 没有提交 commit 随即切换了分支,那么我们将会看到另一分支的 内容被随动修改(因为所有改动依然停留在工作区而没有上传至 Git 管理系统)。

合并冲突

在重量级项目的分支开发中,往往会合并时出现同一文件的同一位置(如某一行)对应了两种不同修改内容,自动合并产生了歧义。为了演示这一现象,我们又从主分支创建了分支 dev2创建分支后 对二者做了如下面的修改内容,add 至暂存区并 commit:

git checkout dev2
vim test.txt
git add test.txt
git commit -m "Merge conflict test on dev2."git checkout master
vim test.txt
git add test.txt
git commit -m "Merge conflict test on master."

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

此时两分支内都对文档的后几行进行的修改,但修改内容不同。所以在主分支上,dev2 合并过来时出现了冲突现象(Merge conflict in test.txtUnmerged paths: both modified):

git reflog 
git merge dev2
git status
cat test.txt

在这里插入图片描述

其中冲突部分,<<<<<<< HEAD======= 之间对应的为当前分支的文档内容,=======>>>>>>> dev 之间对应的为 dev 分支的文档内容。 手动删除多余内容,保留兴趣内容后,add 至暂存区并提交,即可解决冲突:

vim test.txt
cat test.txt
git status
git add test.txt
git commit -m "merge after conflict"
git status
git branch -v
git reflog
cat test.txt

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

可以看到括号内提示的主分支合并中 (master|MERGING) 状态改为了正常 master

Git 的远端操作

结合本地管理操作与分支的运用,我们可以将本地的项目内容向远端的代码托管中心进行交互了。此处的远端仓库以 GitHub 为例,创建一个私有仓库(不开源)并命名为 GitProject

在这里插入图片描述
常见的远端交互指令如下:

指令作用
1git remote -v查看当前所有远端仓库的地址及别名
2git remote add <name> <url>添加一个新的远端仓库 url 并命名为别名 name
3git push <name> <branch>将本地分支 branch 推送到远端仓库 name
4git push <name> -d <remote-branch>将远端仓库 name 上的 remote-branch 分支删除
5git clone <repo>将远端仓库 repo 的所有内容拷贝下来到本地当前目录
6git pull <repo> <remote-branch>将远端仓库 repo 上的 remote-branch 分支下拉到本地并与当前本地分支直接合并
7git fetch <repo>将远端仓库 repo 上的所有分支拿取到本地并但不合并
8git fetch <repo> <remote-branch>将远端仓库 repo 上的 remote-branch 分支拿取到本地并但不合并

clone,pull,与 fetch 的区别如图;其中 fetch 仅将远端仓库的分支副本拿取下来,但工作区的工作目录并不会发生改变,而 pull 则是对分支副本与仓库资源内容均做了下拉,工作区的工作目录内容会发生改变:

在这里插入图片描述

与远端建立连接

以前面在 GitHub 上的创建的 GitProject 为例,我们需要先获取其 ssh 地址并为其创建别名:

git remote add github-ssh "git@github.com:Sycamore-Ma/GitProject.git" 
git remote -v

远端仓库对应的 SSH 地址可在如图位置找到。
在这里插入图片描述
在这里插入图片描述

SSH 秘钥协议

由于远端仓库受 SSH 秘钥保护,所以本地在向远端进行推送或拉取时,需要事先使用如下指令(默认回车)生成本计算机的公共秘钥,找到在本地计算机的秘钥文本存储位置,并将其粘贴至远端仓库的协议中:

ssh-keygen

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

具体操作流程读者可访问链接:如何解决 git@github.com permission denied (publickey). fatal could not read from remote repository。

如果未能解决 SSH 秘钥问题,在向远端私有仓库推送或拉取时,识别秘钥会出现 git@github.com: Permission denied (publickey).fatal: Could not read from remote repository. 等错误。

同样地,GitHub 上可以邀请其他成员使用 Git 管理系统进行协同开发,读者可移步至 Git&GitHub 团队协作 了解详情。
在这里插入图片描述

远端的推送与拉取

通过以下指令,我们可以将本地的 master 分支推送至 github-ssh 别名对应的远端仓库:

git push github-ssh master

在这里插入图片描述

可以看到 GitHub 代码托管已经出现了新内容,远端分支为 master,与本地 master 分支一致。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

同样地我们可以在另外一台设备上测试拉取(该设备秘钥已经达成协议,此处不赘述),我们创建一个新的空文件夹,并在其路径上 Bash,完成前面章节的 初始化 与远端连接工作,执行远端拉取:

git init
git remote add github-ssh "git@github.com:Sycamore-Ma/GitProject.git" 
git remote -v
git pull github-ssh mastergit status 
git branch -v
git reflog

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

可以看到,另外一台设备也分布式地获取了远端代码托管中心的所有资源,可用于后续的协同修改、合并、推送。这样跨地开发的需求就达成了。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

leetcode500. 键盘行

【简单题】 给你一个字符串数组 words &#xff0c;只返回可以使用在 美式键盘 同一行的字母打印出来的单词。键盘如下图所示。 美式键盘 中&#xff1a; 第一行由字符 "qwertyuiop" 组成。第二行由字符 "asdfghjkl" 组成。第三行由字符 "zxcvbnm&…

Nacos集群

需要与Nginx配合。 这是使用三个Nacos来搭建集群。 创建mysql数据库nacos。 配置Nacos 进入nacos的conf目录&#xff0c;修改配置文件cluster.conf.example&#xff0c;重命名为cluster.conf。 在cluster.conf文件的最后加上&#xff1a; #it is ip #example 127.0.0.1:8…

通俗理解DDPM到Stable Diffusion原理

代码1&#xff1a;stabel diffusion 代码库代码2&#xff1a;diffusers 代码库论文&#xff1a;High-Resolution Image Synthesis with Latent Diffusion Models模型权重&#xff1a;runwayml/stable-diffusion-v1-5 文章目录 1. DDPM的通俗理解1.1 DDPM的目的1.2 扩散过程1.3 …

测试框架pytest教程(6)钩子函数hook开发pytest插件

pytest hook 函数也叫钩子函数&#xff0c;pytest 提供了大量的钩子函数&#xff0c;可以在用例的不同生命周期自动调用。 比如&#xff0c;在测试用例收集阶段&#xff0c;可利用 hook 函数修改测试用例名称的编码。 pytest的hook是基于Python的插件系统实现的&#xff0c;使…

Tokenview再度升级:全新Web3开发者APIs数据服务体验!

Tokenview发布全新版本的区块链APIs和数据服务平台&#xff0c;为开发者打造更强大、更便捷的开发体验&#xff01; 此次升级&#xff0c;我们整合了开发者使用习惯以及Tokenview产品优势。我们深知对于开发者来说&#xff0c;时间是非常宝贵的&#xff0c;因此我们努力提供一…

蚂蚁 SOFAServerless 微服务新架构的探索与实践

赵真灵&#xff08;有济&#xff09; 蚂蚁集团技术专家 Serverless 和微服务领域专家曾负责基于 K8s Deployment 的应用发布运维平台建设、K8s 集群的 Node/pod 多级弹性伸缩与产品建设。当前主要负责应用架构演进和 Serverless 相关工作。同时也是 SOFAArk 社区的开发和维护者…

两款开箱即用的Live2d

目录 背景第一款&#xff1a;开箱即用的Live2d在vue项目中使用html页面使用在线预览依赖文件地址配置相关参数成员属性源码 模型下载 第二款&#xff1a;换装模型超多的Live2d在线预览代码示例源码 模型下载 背景 从第一次使用服务器建站已经三年多了&#xff0c;记得那是在2…

【沐风老师】如何在3dMax中将3D物体转化为样条线构成的对象?

在3dMax中如何把三维物体转化为由样条线构成的对象&#xff1f;通常这样的场景会出现在科研绘图或一些艺术创作当中&#xff0c;下面给大家详细讲解一种3dmax三维物体转样条线的方法。 第一部分&#xff1a;用粒子填充3D对象&#xff1a; 1.创建一个三维对象&#xff08;本例…

动物体外受精手术VR模拟仿真培训系统保证学生及标本的安全

奶牛是养殖业主要的资源&#xff0c;因此保证奶牛的健康对养殖业的成功和可持续发展具有重要已用&#xff0c;奶牛有一些常见易发病&#xff0c;一旦处理不当&#xff0c;对奶牛业都会造成较大的经济损失&#xff0c;传统的奶牛手术培训实操难度大、风险高且花费大&#xff0c;…

软件设计师学习笔记6-存储系统

目录 1.层次化存储体系 1.1层次化存储结构 1.2层次化存储结构的分类 2.Cache 2.1概念 2.2映像 2.2.1概念 2.2.2分类 2.2.3不同映像的图解(帮助理解&#xff0c;不考) 3.主存编址方法 3.1计算公式 3.2补充内容 1.层次化存储体系 1.1层次化存储结构 局部性原理是层次…

C++day3(类、this指针、类中的特殊成员函数)

一、Xmind整理&#xff1a; 二、上课笔记整理&#xff1a; 1.类的应用实例 #include <iostream> using namespace std;class Person { private:string name; public:int age;int high;void set_name(string n); //在类内声明函数void show(){cout << "na…

Spring Boot多环境指定yml或者properties

Spring Boot多环境指定yml或者properties 文章目录 Spring Boot多环境指定yml或者properties加载顺序配置指定某个yml 加载顺序 ● application-local.properties ● application.properties ● application-local.yml ● application.yml application.propertes server.port…

RT1050的ADC

文章目录 1 ADC介绍2 ADC框图2.1 外部输入通道2.2 输入电压范围2.3 触发源2.4 时钟源2.5 偏移矫正功能2.5.1 校准 3 单通道中断采集实验3.1 ADC选项3.2 ADC配置3.3 配置用户通道和中断3.4 中断代码 1 ADC介绍 RT1052 有 2 个 ADC&#xff0c;每个 ADC 有 12 位、10 位、8 位可…

使用windeployqt和InstallShield打包发布Qt软件的流程

前言 Qt编译之后需要打包发布&#xff0c;并且发布给用户后需要增加一个安装软件&#xff0c;通过安装软件可以实现Qt软件的安装&#xff1b;用于安装软件的软件有很多&#xff0c;这里主要介绍InstallShield使用的流程&#xff1b; 使用windeployqt打包Qt编译后的程序 Qt程序…

【JavaEE】Spring事务-事务的基本介绍-事务的实现-@Transactional基本介绍和使用

【JavaEE】Spring事务&#xff08;1&#xff09; 文章目录 【JavaEE】Spring事务&#xff08;2&#xff09;1. 为什么要使用事务2. Spring中事务的实现2.1 事务针对哪些操作2.2 MySQL 事务使用2.3 Spring 编程式事务&#xff08;手动挡&#xff09;2.4 Spring 声明式事务&#…

【线程池】ThreadPoolExecutor的使用示例

文章目录 通过ThreadPoolExecutor创建线程池。线程的处理结果如何获取&#xff1f; 通过ThreadPoolExecutor创建线程池。 ThreadPoolExecutor构造方法参数&#xff1a; int corePoolSize //核心线程数量int maximumPoolSize//最大线程数long keepAliveTime//当线程数大于核心…

【无线点对点网络时延分析和可视化】模拟无线点对点网络中的延迟以及物理层和数据链路层之间的相互作用(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

Win解答 | 解决键盘中 字母+空格 导致的输入法弹窗导致的一系列问题

近三个月来&#xff0c;一直都有一个键盘组合键的问题影响我的电脑使用&#xff0c;不管是打字还是打游戏&#xff0c;都会出现按键盘的 字母空格 弹出一个特殊符号的候选框&#xff0c;如下图所示 图片中为 S空格 所出现的弹窗 一个看似方便&#xff0c;实则难受的功能 其实打…

SpringBoot入门篇2 - 配置文件格式、多环境开发、配置文件分类

目录 1.配置文件格式&#xff08;3种&#xff09; 例&#xff1a;修改服务器端口。&#xff08;3种&#xff09; src/main/resources/application.properties server.port80 src/main/resources/application.yml&#xff08;主要用这种&#xff09; server:port: 80 src/m…

[Go版]算法通关村第十四关白银——堆高效解决的经典问题(在数组找第K大的元素、堆排序、合并K个排序链表)

目录 题目&#xff1a;在数组中找第K大的元素解法1&#xff1a;维护长度为k的最小堆&#xff0c;遍历n-k个元素&#xff0c;逐一和堆顶值对比后&#xff0c;和堆顶交换&#xff0c;最后返回堆顶复杂度&#xff1a;时间复杂度 O ( k ( n − k ) l o g k ) O(k(n-k)logk) O(k(n−…