【Git】查看差异 删除文件 忽略文件

- 第 122 篇 -
Date: 2025 - 09 - 07
Author: 郑龙浩(仟墨)

文章目录

  • 查看差异 && 删除文件 && 忽略文件
  • 1 git diff 可以查看哪些?
    • 基本用法
    • 比较不同提交
    • 比较分支
    • 文件比较
    • 其他
  • 2 彻底删除文件
  • 3 忽略文件
    • 「1」应该忽略哪些文件?
    • 「2」如何让本地仓库忽视某些文件?
      • **1 两种忽略方式**
      • **2 如何创建和修改`.gigignore`文件?**
        • 方法1:直接创建文件(推荐新手用)
        • 方法2:用命令创建(稍微高级一点)
    • 「3」已经提交的文件「无法被忽略」!!!
      • **常见误区**:
      • **为什么会这样?**
      • 如果已经提交的文件想忽略,怎么办呢?
    • 「4」如何检查文件是否在被跟踪:
    • 「5」`.gitignore`匹配规则
      • 基本规则
      • 目录匹配

查看差异 && 删除文件 && 忽略文件

1 git diff 可以查看哪些?

基本用法

  1. 工作区与暂存区的差异(未 add 到「暂存区」的修改)

    git diff
    
  2. 暂存区与最后一次提交的差异(已 add 但未 commit 到「本地仓库」的修改)

    git diff --cached
    
  3. 工作区与最后一次提交的差异(所有未提交的修改)

    git diff HEAD
    

比较不同提交

  1. 两次提交之间的差异(比如第n次提交与第m次提交的区别)

    git diff 第n次提交的ID 第m次提交的ID
    
  2. 某次提交的差异与最后一次提交

    git diff 某次提交的ID HEAD
    
  3. 上次提交的差异与最后一次提交

    git diff HEAD~1 HEAD
    # 或
    git diff HEAD~ HEAD
    
  4. 上n次提交的差异与最后一次提交

    git diff HEAD~n HEAD
    

比较分支

  1. 两个分支之间的差异

    git diff branch1 branch2
    
  2. 当前分支与其他分支的差异

    git diff ..other_branch
    

文件比较

  1. 不同文件之间的差异

    git diff -- file1 file2
    
  2. 特定文件的修改历史

    git diff commit1..commit2 -- path/to/file
    

其他

  1. 统计变更而非显示具体内容

    git diff --stat
    
  2. 比较单词级别的差异而非行级别

    git diff --word-diff
    
  3. 查看重命名/移动文件的差异

    git diff --find-renames
    
  4. 比较时忽略空格变化

    git diff --ignore-all-space
    
  5. 比较两个远程分支的差异

    git diff origin/branch1 origin/branch2
    

2 彻底删除文件

① 第一种方法 先从「工作区」删除文件,再从「暂存区」删除,再提交到「本地仓库」删除的记录

删除 file3.txt 文件

rm file3.txt 或者 fit add file3.txt

首先删除文件之后,我们使用git status查看状态的时候,依然可以看到file3.txt在「暂存区」中,如果使用git ls-files命令,我们发现在「暂存区」中依然存储着「file3.txt」文件,并未在「暂存区」删除,

我们依然要执行 一次git add file3.txt,告诉「暂存区」,我已经将「工作区」中的ile3.txt文件删除

此时「暂存区」中肯定是没有file3.txt,但是「本地仓库」中依然还有file3.txt文件,所以我们依然要执行git commit -m "delete file3.txt"告诉「本地仓库」file3.txt文件已经删除

如何查看「暂存区」中的内容呢?

git ls-files

② 第二种方法:直接将文件从「工作区」和「暂存区」同时删除,再提交到「本地仓库」删除的记录

git rm file.txt

③ 第三种方法:把文件从「暂存区」中删除,但保留在当前「工作区」中,再提交到「本地仓库」删除的记录

git rm --cached file.txt

④ 递归删除某个目录下的所有「子目录」和「文件」,然后依然再提交到「本地仓库」删除的记录

git rm -r *

3 忽略文件

.gitignore 是一个纯文本文件,用于指定 Git 版本控制系统应忽略的文件和目录模式。这些被忽略的文件将不会被纳入版本控制。

「1」应该忽略哪些文件?

  1. 系统与IDE生成文件
  • 操作系统文件:.DS_Store (Mac), Thumbs.db (Windows)
  • IDE配置目录:.idea/, .vscode/, *.swp
  1. 编译输出文件
  • Java: *.class, target/
  • C/C++: *.o, *.exe, *.out
  • Python: __pycache__/, *.pyc
  1. 依赖管理目录
  • Node.js: node_modules/
  • PHP: vendor/
  • Go: bin/, pkg/
  1. 敏感信息文件
  • 环境变量文件:.env, .env.local
  • 密钥文件:*.pem, *.key, *.crt
  • 配置文件:config.properties
  1. 构建产物与压缩包
  • 打包文件:*.zip, *.tar.gz, *.rar
  • 构建输出:dist/, build/, *.min.js
  1. 运行时生成文件
  • 日志文件:*.log, logs/
  • 临时文件:*.tmp, temp/
  • 缓存文件:.cache/

「2」如何让本地仓库忽视某些文件?

说白了,直接将需要忽视的文件加入到.gitignore文件中即可

1 两种忽略方式

  • 可以直接加某个文件,比如aaa.exe

  • 也可以利用通配符*,表示任意

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

2 如何创建和修改.gigignore文件?

方法1:直接创建文件(推荐新手用)
  1. 在项目文件夹里右键 → 新建文本文件

  2. 把文件名改成 .gitignore

  3. 打开文件,写入要忽略的内容,比如:

    第一行一定要写:node_modules/

    node_modules/
    .env
    *.log
    
方法2:用命令创建(稍微高级一点)

如果是第一次创建

echo "node_modules/" > .gitignore

这个命令会创建 .gitignore 文件,并写入 node_modules/ –> 第一行必须要写这个

如果要追加内容(不覆盖原有内容):

echo ".env" >> .gitignore

注意这里用 >> 而不是 >,这样不会清空原有内容,如果是一个>的话,会覆盖的

「3」已经提交的文件「无法被忽略」!!!

常见误区

很多新手以为只要把文件加到 .gitignore里,Git 就会自动忽略它。但其实如果这个文件之前已经被提交过(在版本库里),光加 .gitignore是不起作用的!

为什么会这样?

因为 Git 会记住所有已经被跟踪的文件,.gitignore只能阻止 Git 跟踪新文件,不能让它"忘记"已经跟踪的文件。

如果已经提交的文件想忽略,怎么办呢?

流程大概是:

① 将该文件从本地仓库删除 (注意:只删除本地仓库中的即可,不要将工作区和暂存区的文件删除,不然这个文件就会在文件夹中被删除了)

② 将这个文件名添加到.gitignore文件当中,注意用追加,不要将原来的内容覆盖

③ 最后提交这次更改(一定要提交这次修改,不要忘记)

aaa.log举例

  1. 先讲这个文件从git移除,也就是删除这个文件

    git rm --cached aaa.log
    

    这个命令只移除 Git 的跟踪,不会删除电脑上的实际文件

  2. 然后再将这个文件名添加到.gitignore文件当中

    echo "aaa.log" >> .gitignore
    

    >>追加,避免覆盖原有忽略规则

  3. 然后提交这次的修改内容

    git add .gitignore
    git commit -m "忽略 aaa.log 文件"
    

「4」如何检查文件是否在被跟踪:

git ls-files

这个命令的作用就是列出所有被 Git 跟踪的文件

「5」.gitignore匹配规则

从上到下逐行匹配的,每一行都是一个独立的忽略模式

基本规则

  • #开头:注释行(被忽略)

    # 这是一个注释,这行会被 Git 忽略
    
  • 空行:被忽略,用于分隔

    # 空行用于分隔不同类别的忽略规则
    *.log
    
  • *:匹配任意字符(除 /

    *.tmp        # 忽略所有 .tmp 后缀文件
    temp*        # 忽略所有以 temp 开头的文件
    
  • ?:匹配单个字符

    file?.txt    # 忽略 file1.txt、fileA.txt 等
    
  • []:匹配括号内任意字符

    [0-9] 表示任意一位数字,[a-z]表示任意一位小写字母,大写反之

    [abc].txt    # 忽略 a.txt、b.txt、c.txt
    log[0-9].txt   # 忽略 log0.txt 到 log9.txt
    test_[a-z].js  # 忽略 test_a.js 到 test_z.js
    
  • !:取反(表示不忽略匹配文件)

    *.log         # 忽略所有 .log 文件
    !error.log    # 但不忽略 error.log
    

目录匹配

  • /结尾:匹配目录

    # 只忽略当前目录下的 AAA 文件,不忽略其他子目录下的AAA文件
    /AAA
    
  • /开头:从根目录开始匹配

    # 忽视任何目录下的AAA文件夹
    AAA/
    
  • AA/ab.txt

    # 忽略AA文件夹中以.txt结尾的文件,但是不会忽略AA文件夹下面的子目录下面的 .txt文件
    # 比如不会忽略AA/AB/
    AA/*.txt
    
  • \**:匹配多级目录

# 忽略 AA/目录及其所有子目录下的.exe文件
AA/**/*.exe

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

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

相关文章

HarmonyOS应用开发:三层工程架构

引言 在HarmonyOS应用开发过程中,随着项目规模的增长,代码的组织结构显得尤为重要。 DevEco Studio创建出的默认工程仅包含一个entry类型的模块,如果直接使用平级目录进行模块管理,工程逻辑结构较混乱且模块间的一栏关系不够清晰&…

phpMyAdmin文件包含漏洞复现:原理详解+环境搭建+渗透实战(windows CVE-2018-12613)

目录 一、CVE-2018-12613漏洞 1、漏洞简介 2、漏洞原理 (1)漏洞触发点与正常逻辑 (2)过滤逻辑缺陷与绕过方式 二、渗透准备 1、访问phpmyadmin靶场 2、登录phpmyadmin 3、获取session文件位置 三、渗透准备 1、读取敏感…

Jakarta EE(基于 JPA)在 IntelliJ IDEA 中开发简单留言板应用的实验指导

Jakarta EE(基于 JPA)在 IntelliJ IDEA 中开发简单留言板应用的实验指导摘要:Jakarta EE 并不仅限于使用 H2 数据库,它支持任何符合 JDBC 或 JPA 标准的数据库,例如 MySQL、PostgreSQL、Oracle 等。H2 通常用于开发测试…

Gitea:轻量级的自托管Git服务

欢迎光临我的个人博客查看最新文章:rivers blog 在当今的软件开发世界中,代码托管平台是必不可少的工具。而对于寻求自主控制和数据隐私的团队与开发者来说,Gitea提供了一个完美的解决方案。 1、 Gitea简介 Gitea(发音为ɡɪˈti…

深度学习-----简单入门卷积神经网络CNN的全流程

(一)卷积神经网络(CNN)的核心思想传统全连接网络的缺陷图像平铺展开后,旋转或位置变化会导致输入差异大,难以识别举例:手写数字“8”在不同位置或旋转后的识别困难(图像在计算机中是…

Scikit-learn Python机器学习 - 特征降维 压缩数据 - 特征选择 - 单变量特征选择 SelectKBest - 选择Top K个特征

锋哥原创的Scikit-learn Python机器学习视频教程: 2026版 Scikit-learn Python机器学习 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 课程介绍 本课程主要讲解基于Scikit-learn的Python机器学习知识,包括机器学习概述,特征工程(数据…

Datawhale AI夏令营复盘[特殊字符]:我如何用一个Prompt,在Coze Space上“画”出一个商业级网页?

文章摘要 本文详细记录了我在Datawhale AI夏令营期间,如何另辟蹊径,使用Coze(扣子空间)和精心设计的Prompt,从零开始构建一个专业的“智能SEO Agent”产品网页的完整过程。文章将完整展示我编写的“万字”级Prompt&…

SVN和Git两种版本管理系统对比

一、SVN(Subversion)简介SVN是一种集中式版本控制系统。它有一个中心仓库(repository),所有的代码变更都记录在这个中心仓库中。每个开发者从中心仓库检出(checkout)代码到本地工作副本&#xf…

【机器学习】综合实训(一)

项目一 鸢尾花分类该项目需要下载scikit-learn库,下载指令如下:pip install scikit-learn快速入门示例:鸢尾花分类# 导入必要模块 from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklea…

vulhub通关笔记1—docker unauthorized-rce

1.docker unauthorized-rce 基本情况 docker swarm是一个将docker集群变成单一虚拟的docker host工具,使用标准的Docker API,能够方便docker集群的管理和扩展,由docker官方提供: 需要在每台机器上安装docker,并且运行…

zotero扩容

最近出差,想要把本地的主机上的文件同步到笔记本,发现zotero不够用,然后寻找了一些zotero扩容的方法,这里记录一下,方便以后查阅。 zotero扩容创建账户登录账户进一步扩容设置Apps Connection设置zoterozotero自带同步…

Kafka基础理论

Kafka概述 kafka是一个分布式的基于发布/订阅模式的消息队列,主要用于大数据实时处理领域。kafka采取了发布/订阅模式,消息的发布者不会将消息直接发送给特定的订阅者,而是将发布的消息分为不同的类别,订阅者只接受感兴趣的消息。…

苍穹外卖项目实战(day-5完整版)-记录实战教程及问题的解决方法

Redis基本操作及下载安装包(Redis及可视化工具),都在我的上一篇文章:Redis基本知识及简单操作,这里不再赘述 店铺营业状态修改功能 (1)需求分析与设计 (2)SpringDataRe…

第R8周:RNN实现阿尔兹海默病诊断

数据集包含2149名患者的广泛健康信息,每名缓则的ID范围从4751到6900不等,该数据集包含人口统计详细信息,生活方式因素、病史、临床测量、认知和功能评估、症状以及阿尔兹海默症的诊断。 一、准备工作 1、硬件准备 import numpy as np import …

MySQL复制技术的发展历程

在互联网应用不断发展的二十多年里,MySQL 一直是最广泛使用的开源关系型数据库之一。它凭借开源、轻量、灵活的优势,支撑了无数网站、移动应用和企业系统。支撑 MySQL 长期发展的关键之一,就是 复制(Replication)技术。…

C++从字符串中移除前导零

该程序用于去除字符串开头的零字符。当输入"0000123456"时,程序会输出"123456"。核心函数removeZero()通过while循环找到第一个非零字符的位置,然后使用erase()方法删除前面的所有零。主函数读取输入字符串并调用该函数处理。程序简…

【面试题】C++系列(一)

本专栏文章持续更新,新增内容使用蓝色表示。C面向对象的三大特性:封装,继承,多态(1)封装是将数据和函数组合到一个类里。主要目的是隐藏内部的实现细节,仅暴露必要的接口给外部。通过封装&#…

当没办法实现从win复制东西到Linux虚拟机时的解决办法

① 先确认是否已安装bash复制sudo apt list --installed | grep open-vm-tools如果 没有任何回显 → 没装,跳到 ③如果看到 open-vm-tools 已安装 → 继续 ②② 启动正确的服务(单词别打错)bash复制systemctl status vmtoolsd # 查看…

用Markdown写自动化用例:Gauge实战全攻略!

你作为一名自动化测试工程师,正在为一个复杂的Web应用编写测试脚本:传统工具要求写大量代码,维护起来像解谜游戏,团队非技术成员完全插不上手。这时,Gauge这个“自动化神器”如魔法般出现——它允许用Markdown写可读的…

Unity开发保姆级教程:C#脚本+物理系统+UI交互,3大模块带你通关游戏开发

文章目录基础概念Unity开发环境搭建版本选择:为什么2021 LTS是最佳起点?三步安装:从下载到项目创建界面认知:5分钟掌握核心操作区配置优化:让开发更顺畅验证环境:创建你的第一个CubeC#基础语法与Unity脚本结…