git实用命令

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

要查看某个文件是否被提交(commit)到 Git 仓库过,最快速、直接的命令是:
git log --oneline -- <文件路径>

1. 结果判断

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

2. 常用查看场景及命令

  • 查看该文件的完整提交历史(包含作者、日期):
    git log -- <文件路径>
    
  • 查看某个文件目前是否属于“未追踪(Untracked)”或“已修改未提交”状态:
    git status -- <文件路径>
    • 如果提示 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 的末尾追加一行:
!rust/vendor
如果在 .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"
参考资料:
posted @ 2026-07-06 13:58  PKICA  阅读(3)  评论(0)    收藏  举报