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

推荐订阅源

Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
美团技术团队
腾讯CDC
V
V2EX
G
Google Developers Blog
博客园 - Franky
博客园 - 司徒正美
Stack Overflow Blog
Stack Overflow Blog
阮一峰的网络日志
阮一峰的网络日志
Microsoft Azure Blog
Microsoft Azure Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
T
The Blog of Author Tim Ferriss
Recent Announcements
Recent Announcements
Google DeepMind News
Google DeepMind News
罗磊的独立博客
C
Check Point Blog
MyScale Blog
MyScale Blog
aimingoo的专栏
aimingoo的专栏
F
Fortinet All Blogs
酷 壳 – CoolShell
酷 壳 – CoolShell
V2EX - 技术
V2EX - 技术
The Last Watchdog
The Last Watchdog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
有赞技术团队
有赞技术团队
Security Archives - TechRepublic
Security Archives - TechRepublic
S
Security @ Cisco Blogs
W
WeLiveSecurity
D
DataBreaches.Net
Forbes - Security
Forbes - Security
V
Visual Studio Blog
P
Proofpoint News Feed
S
Secure Thoughts
H
Help Net Security
Cloudbric
Cloudbric
云风的 BLOG
云风的 BLOG
Microsoft Security Blog
Microsoft Security Blog
N
News and Events Feed by Topic
Schneier on Security
Schneier on Security
Engineering at Meta
Engineering at Meta
Attack and Defense Labs
Attack and Defense Labs
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
S
Security Affairs
L
LangChain Blog
Last Week in AI
Last Week in AI
Martin Fowler
Martin Fowler
Hacker News: Ask HN
Hacker News: Ask HN
H
Heimdal Security Blog
M
MIT News - Artificial intelligence
The Register - Security
The Register - Security

博客园 - PKICA

博文阅读密码验证 - 博客园 博文阅读密码验证 - 博客园 博文阅读密码验证 - 博客园 博文阅读密码验证 - 博客园 博文阅读密码验证 - 博客园 博文阅读密码验证 - 博客园 博文阅读密码验证 - 博客园 博文阅读密码验证 - 博客园 博文阅读密码验证 - 博客园 博文阅读密码验证 - 博客园 博文阅读密码验证 - 博客园 博文阅读密码验证 - 博客园 rust线程-std::thread::park和unpark 配合Builder实现轻量级的线程挂起与唤醒 rust自定义线程属性std::thread::Builder rust线程 rust关联函数 rust高并发设计实践进阶 rust高并发设计实践 rust性能优化与安全边界 联合体union在rust和C语言中有什么区别 rust并发与异步编程 如何预防rust不良的代码设计总结 rust类型系统与零成本抽象 rust内存模型 告别大显存依赖!用 Rust 新一代深度学习框架 Burn 打造纯 CPU 文本分类推理引擎 rust类型系统标记 编译配置解答 rust底层设计理念值得注意的几个地方总结 rust可变引用作为函数参数的机理详解 Rust内存重解释transmute C与Rust类型映射 Rust FFI 安全抽象范式 rust延迟初始化原语 rust重借用机制与原理 rust参数传递模型 汇编语言语法详解 gdb汇编调试 gdb-pwndbg的安装与使用指南 gdb调试插件gef C语言thread_local linux系统readelf命令使用指南 gcore转储进程内存 gdb查看命令 RGB与YUV颜色编码的区别 Rust原子类型 C++ STL求两个集合交集差集 gdb调试集锦 ubuntu24.0.4使用root用户登录 ubuntu24.0.4输入密码后跳回登录界面 AI内存压缩技术TurboQuant及存疑 ubuntu切换到指定内核版本 在没有顶级科技大佬直接背书的情况下deepseek为啥能够异军突起? HuggingFace和deepseek的关系 当前主流AI大模型 Rust写时克隆Cow系列2
git实用命令
PKICA · 2026-07-06 · via 博客园 - PKICA

1.如何查看是否提交过某个文件

要查看某个文件是否被提交(commit)到 Git 仓库过,最快速、直接的命令是:

git log --oneline -- <文件路径>

1. 结果判断

  • 如果有输出(显示了一行或多行 commit 哈希和提交信息):说明该文件被提交过。
  • 如果没有任何输出(直接返回空白):说明该文件在 Git 历史中从未被提交过。

2. 常用查看场景及命令

  • 查看该文件的完整提交历史(包含作者、日期):
  • 查看某个文件目前是否属于“未追踪(Untracked)”或“已修改未提交”状态:
    • 如果提示 Untracked files:说明该文件从未被提交过,且当前不在暂存区。
    • 如果提示 Changes to be committedChanges not staged for commit:说明它曾被提交过,或者已经被移入了暂存区,当前存在未提交的修改。
  • 如果你怀疑文件曾被提交过、但后来被彻底删除了,想查出是谁删的:
    git log --all --full-history --oneline -- <文件路径>

2.gitignore详解

1. ! 符号:取反(白名单 / 强制不忽略)

.gitignore 中,叹号 ! 用于推翻之前的忽略规则。它告诉 Git:“即使前面写了要忽略,这个特定的文件或文件夹也绝对不能忽略”。

  • 核心陷阱(重要): 如果一个文件的父目录已经被整体忽略了,那么对该目录下子文件的 ! 取反规则是不会生效的(因为 Git 为了提高效率,根本不会去扫描被整体忽略的目录)。

正确示例:

# 忽略所有 .log 结尾的文件
*.log

# 但是!不要忽略这个特定的 log 文件
!important.log

错误与正确的目录取反对比:

# ❌ 错误示范:这样写没办法留住 important.log
logs/
!logs/important.log   # 规则失效!因为 logs/ 目录已经被整体跳过了

#  正确写法:
logs/*
!logs/important.log   # 成功!忽略 logs 下的所有内容,但给 important.log 留了白名单

2. 不带斜杠 /:全局递归匹配

如果一个匹配规则中完全不带有斜杠 /,Git 会将其视为一个全局通配符。它会递归地应用到项目里任何层级的目录中

  • vendor:会忽略根目录下的 vendor,也会忽略 rust/vendorsrc/bin/vendor任何子目录下的 vendor 文件夹或文件。
  • *.ext:会忽略整个仓库里所有地方的 .ext 后缀文件。

带斜杠与不带斜杠的区别对比:

  • vendor(不带斜杠):匹配任何地方的 vendor。
  • /vendor(开头带斜杠):只匹配根目录下的 vendor,不会影响 rust/vendor
  • vendor/(结尾带斜杠):匹配任何地方名为 vendor 的文件夹,但不会忽略名为 vendor 的文件。

💡 规则总结速查表

规则语法实际效果匹配示例
vendor 忽略任何层级名为 vendor 的文件或文件夹 vendor/, rust/vendor/, src/vendor
/vendor 仅忽略根目录下的 vendor 文件夹/文件 根目录 vendor/(不会忽略 rust/vendor/
!rust/vendor 不忽略 rust/vendor,强制将其纳入版本控制 保护 rust/vendor 不被前面的通用规则吞掉

如果想在 .gitignore确保不忽略 rust/vendor 目录(以便离线提交三方库),可以在 .gitignore 的末尾追加一行:

如果在 .gitignore 中已经写了 /.cargo/config,但修改该文件后 Git 依然会提示它已被修改(出现在 git statusChanges not staged for commit 中),原因非常明确:

这个文件在被加入 .gitignore 之前,就已经被提交(commit)到 Git 仓库中了。

Git 的底层逻辑是:一旦一个文件被纳入了版本控制(tracked),.gitignore 中的规则对它就会完全失效。

🛠️ 彻底解决的步骤

你需要在不删除本地物理文件的情况下,把这个文件从 Git 的跟踪缓存中剔除(变成 Untracked 状态)。请在源码根目录下执行以下命令:

步骤 1:从 Git 暂存区移除跟踪(保留本地文件)

git rm --cached .cargo/config

(注:如果你的 .cargo 目录是在 rust/ 子目录下,路径请改为 git rm --cached rust/.cargo/config)

步骤 2:提交这次“取消跟踪”的变更

git commit -m "chore: remove .cargo/config from version control"

参考资料: