惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
The Exploit Database - CXSecurity.com
F
Fortinet All Blogs
U
Unit 42
F
Full Disclosure
雷峰网
雷峰网
博客园 - 司徒正美
云风的 BLOG
云风的 BLOG
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
T
Tailwind CSS Blog
The Cloudflare Blog
Last Week in AI
Last Week in AI
罗磊的独立博客
D
DataBreaches.Net
C
Check Point Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
O
OpenAI News
C
CXSECURITY Database RSS Feed - CXSecurity.com
aimingoo的专栏
aimingoo的专栏
S
Security @ Cisco Blogs
大猫的无限游戏
大猫的无限游戏
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
S
SegmentFault 最新的问题
NISL@THU
NISL@THU
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
The Hacker News
The Hacker News
Webroot Blog
Webroot Blog
Security Latest
Security Latest
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Google DeepMind News
Google DeepMind News
酷 壳 – CoolShell
酷 壳 – CoolShell
N
News | PayPal Newsroom
P
Proofpoint News Feed
B
Blog RSS Feed
MongoDB | Blog
MongoDB | Blog
C
Cybersecurity and Infrastructure Security Agency CISA
N
News and Events Feed by Topic
Google Online Security Blog
Google Online Security Blog
H
Help Net Security
Spread Privacy
Spread Privacy
T
Threat Research - Cisco Blogs
GbyAI
GbyAI
I
Intezer
Application and Cybersecurity Blog
Application and Cybersecurity Blog
M
MIT News - Artificial intelligence
Vercel News
Vercel News
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
IT之家
IT之家
MyScale Blog
MyScale Blog
腾讯CDC

博客园_首页

Plist 二进制格式 Milvus 和 PGVector,哪个更好? OpenClaw 已过时?在 VS Code 中运行 Hermes Agent! 第30篇文章:一个大三计科生的自白 Manim如何在数学公式中完美显示中文? Docker 部署 RocketMQ 5 并发编程核心概念辨析 C#事务处理最佳实践:别再让“主表存了、明细丢了”的破事发生 CLI 是什么?为什么大厂突然集体卷命令行? 【从0到1构建一个ClaudeAgent】协作-自主Agent UIImageView 设置图片不生效的原因排查 最小二乘问题详解20:无先验约束下的增量式SFM自由网平差 痞子衡嵌入式:大话双核i.MXRT1180之XIP应用里借助MU实现可靠Flash IAP的方法 AI Chat 封装, SemanticKerne.AiProvider.Unified 已发布 Windows下右键编辑js文件无法打开记事本——在注册表中使用环境变量 在后台服务中使用 Scoped 服务,为什么总是报错? H200 安装驱动并使用sglang启动模型 wireshark 抓包Trap上报告警内容 我用 AI 辅助开发了一系列小工具(2):图片压缩工具 [A Primer On MC and CC] 2.1 Memory Consistency 1 - 指令重排序和 SC 模型 Oracle数据库SCN推进技术详解与实践指南 玩转控件:封装个带图片的Label控件 Claude Code 4.7 真正该升级的不是模型,而是你的工作流 前端小白一句话,AI 帮我做了个颜值拉满的桌面媒体播放器。当代码不再是门槛,一句话编程就是现实。 5. WorkBuddy: 小龙虾的灵魂三件套,让你的小龙虾不只是工具 SQLite 分片方案实战:三种分片策略的深度对比 告别简陋 UI!一款基于 Fluent Design 和基于 WinUI 的开源免费、现代化的 Avalonia UI 控件库 关于二进制排列组合枚举的总结 AI开发-python-LangGraph框架(3-27-LangGraph从零实现大模型智能决策工作流) ElasticSearch主分片和副本分片概念详解 【002】HTTPS 粗解:证书、TLS 握手与对后端配置的影响 Hermes Agent 一周暴涨五万 Star,但我劝你别急着追 明明连接的是Redis的DB0,为什么能查到DB3的数据? 【从0到1构建一个ClaudeAgent】协作-Agent团队 熟悉电子元器件之后,电子小白下一步该怎么走? MAF快速入门(23)通过C#类定义Skills .NET 高级开发 | 手写一个对象映射框架 FastAPI数据库ORM怎么选?我肝了三个Demo后,终于不再纠结了 mysqldump 参数拾遗:在遗忘与铭记之间 C# .NET 周刊|2026年3月5期 Claude code入门 - 陈彦斌 一文学习入门 ThingsBoard 开源物联网平台 GitHub 热门项目 | 2026年04月16日 如何为GIT设置全局勾子,为每次提交追加信息 Number.isFinite和isFinite与isNaN()和Number.isNaN的区别 PortSwigger SQL注入LAB2 推荐一个测试人必备的Skills,从功能到性能全搞定(附详细实操和安装下载方式) 筑基期:掌握Odoo基础核心知识点02(Odoo XML 开发方式详解) GLM模型这么火,咱们用vllm也咧一个呗! 深入理解 AbortController:从底层原理到跨语言设计哲学 字符串学习笔记 多租户系统框架的基础模块设计和分析设计 Apache SeaTunnel Zeta 为什么能做到“又快又稳”? AI开发-python-LangGraph框架(3-26-LangGraph基本概念及第一个简单样例) Vue 3 组件通信,别只会用 Props 和 Emits 了,这几个狠活儿你得看看 ElasticSearch7.X版本配置密码 用Manim实现动态交点计算--从一个动点问题说起 团结引擎+Addressable+Instant Game打包抖音小游戏 function call 实战:让 LLM 自动判断 pod 异常、调用日志工具并完成故障分析 bubseek —— 让 Agent 的足迹,变成团队的洞察 通过 C# 读取并导出 PDF 书签 如何用 GitHub Actions 实现 Steam 自动化发布 【从0到1构建一个ClaudeAgent】并发-后台任务 .NET 高级开发 | 定制 ASP.NET Core 框架 电子小白:什么是运算放大器(运放) zero2Agent:面向大厂面试的 Agent 工程教程,从概念到生产的完整学习路线 堆上的ORW HC32F460 USB CDC通信异常:非对齐访问异常排查 20260413-Hyperbridge 攻击事件:发生在默克尔山上的验证绕过 那些喊着AI 要淘汰你的人,正在靠你的焦虑赚大钱! 深度学习进阶(八)Swin Transformer 最小二乘问题详解19:带先验约束的增量式SFM优化与实现 SnapTranslate 3.0 正式发布:全局划词翻译 + 完整英语学习闭环,一站式搞定查词、记词、复习 工作的意义、工作的困难认知再思考 .NET + AI 进阶实战:基于类的技能开发 - 打造可治理的 Agent 能力模块 【从0到1构建一个ClaudeAgent】规划与协调-技能 上周热点回顾(4.6-4.12) 电子小白的工具三件套:面包板、杜邦线、万能板 单表五亿数据的查询优化 | Mysql、StarRocks 2. WorkBuddy:从“我是谁”到“帮我干活” C# 如何减少代码运行时间:7 个实战技巧 基于HelixToolkit.SharpDX 渲染3D模型 - 笺上知微 从零开始的双臂具身VLA起源及现阶段发展综述 - SkyXZ 记对 xonsh shell 的使用, 脚本编写, 迁移及调优 - pluvium27 受够了Vibe Coding的失控?换个起点,让AI事半功倍 从开始配置漏洞环境到漏洞复现流程 - 難しい 关于10年工作经验的程序员对OpenClaw的实战经验分享以及看法 - 虚无境 Any metadata 的内存布局 C# .NET 周刊|2026年3月2期 - InCerry 我帮你测过了,测试圈排名第二的 Skill 依然很牛逼 Skill Discovery | 无监督技能发现的经典工作总结 - MoonOut 上下文工程是什么?过时了么?一文讲明白! - 一枫说码 开了 TUN 模式还是直连?90% 的人都踩过这个坑 AScript扩展多种脚本语言 - rockey627 AI 学习笔记:Agent 的记忆机制 你能被装进一个文件里吗?——7 万人把同事"蒸馏"成了 AI - 我没有三颗心脏 Claude Code 通关手册(七):给 AI 装上技能包——Skills 完全指南 - 暮色之狐 在浏览器中快速编辑代码:VSCode Web 集成实践 - Newbe36524 蒸馏自己 skill?基于 Deepseek 的蒸馏器,丐版蒸馏方式,简单便捷 - To_Carpe_Diem Spring AI Aliababa和AgentScope,哪个更好? - 苏三说技术
Git 学习总结
扛枪的书生 · 2026-04-30 · via 博客园_首页

枯木逢春犹再发,人无两度再少年。

导航


0、前言

Git 是一个开源的分布式版本管理系统,是 Torvalds 为了更好地管理 Linux 内核开发而创立的。它可以帮你记录每一次代码变化,并且可以随时回到过去的任何版本。【注:相当于是给项目代码的生命周期开了一个时光隧道,以方便开发人员随时回到过去标记好的位置状态。】

1、基本概念

1.1、工作区、暂存区、版本库(流程节点)

  • 工作区:就是项目目录、工作目录,你需要在这里进行文件的创建、修改和删除操作。
  • 暂存区:可以理解为在工作区进行文件更改操作之前的工作区副本快照,如此一来,之后在工作区进行的每次修改就都有了参照对象。例如,执行命令 git add . 则代表将工作区的文件与暂存区的副本快照进行差异对比以形成补丁包,然后再将暂存区与工作区的文件进行同步以形成新的工作区快照,以供下一次的 add 进行参考使用。【注:add 之前的文件又叫做未暂存文件,add 之后的文件又叫做已暂存文件。】
  • 版本库:暂存区产生的补丁包在通过执行提交命令 git commit -m "zhushi" 之后便正式进入到了版本库中,版本库中存放着历史提交的所有补丁包,这些补丁包的存在确保了项目拥有了一个完整的历史修改记录。

liucheng

注:以上关于暂存区和版本库的描述仅为个人理解,理解不当之处请自行甄别。

1.2、初始化、添加、提交、贮藏(本地操作)

#(0)基础配置【注:git 提交时要求一定要标识当前提交者的身份,否则不允许提交。】
git config --global user.name "你的名字" #任意名字
git config --global user.email "你的邮箱" #任意邮箱
git config --list #查看 git 所有配置项


#(1)初始化:为当前目录构造 .git 目录结构
git init .


#(2)添加:将指定的文件/目录与暂存区的快照进行差异对比,以形成差异补丁包
git add .
git add test.txt


#(3)提交:将 add 产生的补丁包提交到版本库中。
git commit -m "注释说明"


#(4)状态:查看当前工作处于一种什么样的状态。例如,哪些文件修改了但未 add(未暂存文件),哪些文件 add 了但未 commit(已暂存文件)。
git status


#(5)历史:查看代码被修改之后提交过的历史记录。
git log #描述详细的历史记录,但不易于查看
git log --oneline --graph --all #描述简洁且带图表的历史记录


#(6)贮藏:将已更改但未提交的文件都保存起来,等日后自己有时间了再拿出来继续使用。
git stash #保存,但仅保存之前已跟踪的文件,新添加进来的文件不会被保存。如需将新添加的文件也保存进来,需添加 -u 参数。
git stash list #列出保存的项目
git stash pop #恢复

1.3、获取、拉取、推送、克隆(远端操作)

#(0)基础配置【注:远端操作时必须指定远端仓库的位置,以便拉取/推送操作的进行。】
git remote add origin https://github.com/user/repo.git #添加远端仓库
git remote show #查看已配置的远端仓库

#####登录认证相关步骤,请看杂七杂八部分的内容,此处略过...#####

#(1)获取:拉取远程代码到本地的远程分支中,并不与本地主线分支合并。
git fetch 

git branch -r #查看本地拉取下来的远程仓库的分支
git status origin/main #查看本地的远程仓库的状态
git log origin/main #查看本地的远程仓库的日志
git merge origin/main #将拉取下来的本地远程仓库与本地仓库进行合并


#(2)拉取:拉取远程代码到本地的远程分支中,并与本地主线分支合并。
git pull #从远端拉取当前分支,并于本地的当前分支合并
git pull origin main #从远端拉取 main 分支,并于本地的 main 分支合并。哪怕当前分支是 dev 分支,依旧不影响对 main 分支进行更新。


#(3)推送:推送本地代码到远程仓库并合并
git push
git push origin main


#(4)克隆:复制一份远程仓库的内容到本地
git clone https://github.com/user/repo.git

1.4、分支、检出、重置、存档、标签(支线操作)

#(1)分支:从当前的主线任务中分离出来另外一条支线,此时主线和支线的文件环境完全相同,同时两者各自的工作动作也不会影响到对方。此后,若支线的实验工作成功了,主线便可以合并支线直接收获支线的劳动成果,若失败了删除支线即可。
git branch #查看分支
git branch dev #创建 dev 分支
git switch dev #切换到 dev 分支


#(2)检出:直接跳转到指定的 某个分支、某个提交、某个标签 的环境,方便随时查阅当时的现场情况。【注:仿佛穿越过去一样】
git checkout main #跳转到分支
git checkout 8fc7720e4bc5304e1550a7f120e4f02c203d4f07 #跳转到提交
git checkout v1.0.0 #跳转到标签


#(3)重置:重置工作区的 HEAD 指向、以及暂存区的状态、以及工作区的内容。
git reset HEAD~1 #混合重置:撤销 commit、保留代码、取消暂存(回到“未暂存区”)
git reset --soft HEAD~1 #软重置:撤销 commit、保留暂存状态
git reset --hard HEAD~1 #硬重置:撤销 commit、删除暂存、删除工作区改动


#(4)存档:导出某个版本的代码(但不包含 Git 历史),相当于是检出到某个位置,然后将当前位置环境中的文件全部压缩到一个包中。
git archive -o project.zip main


#(5)标签:给某个 commit 打一个“名字”,方便未来定位或记忆这个特殊的节点状态
git tag v1.0.0 #给当前 HEAD 位置(即最近的 commit)打一个标签
git tag tag_name commit #给指定 commit 打一个标签
git push origin --tags #推送 tag 标签【注意:git push 默认并不会推送标签记录,标签记录需要像这样去提交。】

注:关于重置三种状态的区别。

reset

1.5、合并、重基(合并操作)

#(1)合并:把两个分支“合并在一起”,并保留分叉结构,能清晰看到分支是怎么合并的,历史记录清晰。
git switch main
git merge dev

#(2)重基:把你的提交“搬到另一个分支后面”,使得提交历史会比较整洁,但会重写提交历史,无法看清分支是怎么合并的。【注意:重基时,switch 所在的分支不同,则最终形成的提交记录亦有所不同,这一点很重要。】
git switch dev
git merge main

注:Merge 和 Rebase 的区别。【参考视频

merge

rebase

2、杂七杂八

(1)合并冲突。
【1】各分支提交的节点就像是各集合中的元素一样,而分支的合并就像是集合的合并,各分支相同的部分(基于某个节点开始分支之前的部分)就像是集合相交的地方。【2】而节点对应的都是关于文件的修改操作内容,如果两个分支的所有节点所对应的文件并没有相同的部分,那么两分支的所有节点都可以不分先后的顺利合并而不影响最终的结果。而如果两分支的节点有相同的操作文件,或者一个分支的节点中有相同的操作文件,那么就会出现冲突或只能按顺序进行。冲突的部分程序不会进行修改解决,但是他会标记出来然后由人手动进行修改。【3】当我们对分支进行合并时,即便存在冲突 git 也会进行合并处理,然后指出冲突文件,当认为修改之后就又会产生一次冲突修改的提交。

(2)什么是 HEAD。
HEAD 相当于数据结构链表中的头指针,通过这个头指针来在各个提交记录的节点上进行移动,进而展现不一样的目录树以及其它的操作。通常 HEAD 默认指向 master 分支的最后一次更新。通过移动 HEAD,就可以比较容器的变更到要使用的 commit,而非一定要取得 commit 的 id 值之后才能进行。

HEAD 的种类:HEAD、ORIG_HEAD、FETCH_HEAD。
HEAD

(3)提交本地仓库到远端的基础配置。

【1】SSH 密钥认证过程

#(1)生成密钥对,并将私钥放置到家目录
ssh-keygen -t ed25519 -C "你的邮箱"
ssh-add ~/.ssh/id_ed25519

#(2)登录 GitHub,在其 “Settings → SSH and GPG keys → New SSH key” 处将下面公钥的内容添加进去
cat ~/.ssh/id_ed25519.pub

#(3)修改仓库远程地址的格式为 SSH 格式
git remote set-url origin git@github.com:xxx/xxx.git

#(4)配置完毕,测试效果
git push

【2】HTTPS Token 认证过程

#(1)登录 GitHub,在其 “Settings → Developer settings → Personal access tokens” 处新建一个 token。

#(2)设置 git 凭证管理器
git config --global credential.helper store

#(3)执行 push 操作,然后根据提示登录。【注意:用户名:GitHub 账户、密码:填 Token,而非 GitHub 账号的密码。】
git push

#(4)成功登录之后,在用户的家目录下,会出现一个 .git-credentials 的文本文件,文件中记录着登录的账户和 token 的值。

(4)Git 图形化工具推荐:GitKrakenGUI-Client 列表