Git文件管理技巧:轻松删除与查看文件,忽略不必要的文件与文件夹!

news2025/1/9 5:54:40

避免文件混乱:Git 文件操作技巧

  • 一、Git工作原理概述
  • 二、删除文件
  • 三、查看指定文件的修改
  • 四、指定不需要 Git 管理的文件
  • 五、总结

一、Git工作原理概述

Git是一种分布式版本控制系统,其核心在于其高效的快照机制、强大的分支与合并功能、本地开发的灵活性。

  1. 数据结构:Git 将项目的历史记录看作是一个由多个快照组成的链条。每次提交,Git会捕捉当前文件状态并记录这段快照。

  2. 树和对象:Git使用三种主要类型的对象:Blob(文件内容)、Tree(目录结构)和Commit(提交记录)。每次提交都会生成一个Commit对象,指向一个Tree对象,该Tree对象又指向若干Blob对象。

  3. 本地操作:Git是分布式的,每个开发者的本地仓库都是一个完整的版本库,包含了项目的所有历史。开发者可以在本地进行提交、分支、合并等操作,而不需要联网。

  4. 分支管理:Git的分支操作非常轻量,可以快速创建、切换和合并分支。每个分支代表了一个独立的开发线,方便团队协作和功能开发。

  5. 数据完整性:Git使用SHA-1哈希值来唯一标识每个对象,提供强大的数据完整性保护。任何文件或历史记录的改变都会导致哈希值的变化,从而能够检测到数据是否被篡改。

  6. 暂存区:Git 引入了一个暂存区,允许开发者在提交之前选择要提交的更改。这使得开发者可以更精细地控制提交内容。

  7. 远程仓库:虽然Git是分布式的,但它也支持远程仓库。开发者可以使用git pushgit pull命令将本地更改推送到远程仓库或从远程仓库拉取更新。

在这里插入图片描述
在进行任何文件操作之前,了解当前工作目录的状态是至关重要的。使用以下命令可以查看当前的文件状态:

git status

这个命令将显示已修改、已添加和未跟踪的文件,便于了解需要处理的文件。

二、删除文件

进行代码重构,有些类已经不需要了,那对应的源码文件也应该删除,此时怎么操作?比如删除
timer.cpptimer.h,这两个文件已经push到远程仓库了。

在这里插入图片描述
想从 Git 中删除文件,可以使用git rm命令。这个命令不仅会删除文件,还会将删除操作记录到版本控制中:

git rm 文件名

操作步骤如下:

git rm -rf timer.cpp timer.h
git commit –m "remove timer mudlue"
git push

有时希望只是从版本控制中删除文件,但保留本地副本。这时候可以使用--cached选项:

git rm --cached 文件名

要删除所有未跟踪的文件,可以使用git clean命令。请小心使用,以免误删重要文件:

git clean -f

有的时候可能会不小心上传了一些无用的文件,尤其是使用C和C++开发的同事,一不小心上传很多编译的中间文件,当然这个操作是可以通过.gitignore来避免的;还有的时候可能是上传了一个秘钥文件,这样关键的东西一般是很保密的,一般开发人员不应该能看到这样的秘钥文件。那commitpush到远程仓库了,该怎么把它给删除呢?而且记录里也不应该存在,比如我们永久删除sort.hpp

git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch sort.hpp' --prune-empty --tag-name-filter cat -- --all  
# sort.hpp也可以替换成文件夹, 此时要在git rm后添加-r参数

在这里插入图片描述

git push origin master --force  
# 从上图也能看出来远程仓库没有被修改

三、查看指定文件的修改

查看文件所有的commit

git log --oneline filename   # 显示文件的所有修改记录

示例:

$ git log --oneline src/flyMemTest.cc
ac75ee8 (HEAD -> master) Optimize log and print.
53cc38f (origin/master, origin/HEAD) Add Configures class and modify makeFile.
a60663f feat: add test0 algorithm
3235113 optimized code
71d5555 optimize code
1be415f Add os class and update src
66f95bb feat: add asynLogger class
5a29202 feat:update JsonValue and JsonParser
909a271 feat:add src file(JsonValue,JsonParser)

查看所有commit的修改内容:

git log –p filename  # 显示所有commit的修改

示例:
在这里插入图片描述


查看某个commit里的修改:

git show commit-id filename   # 显示某个commit里文件的修改

查看本地修改的差异:

git diff filename   # 查看本地对某个文件做了那些具体修改

与某个commit做比较:

git diff commit-id filename   
# 显示与某个commit间所有的差异,commit-id可以替换成HEAD,比如HEAD~2

两个commit间的差异:

git diff commit-id1 commit-id2   # 显示两个commit所有的差异

在这里插入图片描述

四、指定不需要 Git 管理的文件

在使用 Git 的时候,对于 java 和 c/c++ 类的程序员尤其会遇到一件事情,就是使用git add .的时候或者其它命令的时候会把编译生产的中间文件,比如.class.obj.o等文件提交到库里。Git使用一个.gitignore文件来定义规则,用于忽略那些文件不提交到 Git 中去。

.gitignore可以提交到远程仓库中,这样这些规则就可以共享给所有的开发人员了,在.gitignore文件中每一行都定义了忽略的规则,比如:

*.[oa]
*~

第一行就是表示忽略所有的以.o或者.a结尾的文件,第二行表示忽略所有的以“~”结尾的文件。

在使用.gitignore时,一般遵循这么一个规则:

  • 忽略操作系统自动生成的文件,比如缩略图等;
  • 忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没必要放进版本库,比如Java编译产生的.class文件,比如c++.obj文件;
  • 忽略自己的带有敏感信息的配置文件,比如存放口令的配置文件,比如日志文件等。

那这个.gitignore文件按照什么样的规则去定义的呢?

  1. 空格不匹配任意文件,可作为分隔符,可用反斜杠转义。

  2. 以“”开头的行都会被 Git 忽略。即#开头的文件标识注释,可以使用反斜杠进行转义。

  3. 可以使用标准的glob模式匹配。所谓的glob模式是指shell所使用的简化了的正则表达式。

  4. 以斜杠“/”开头表示目录;“/”结束的模式只匹配文件夹以及在该文件夹路径下的内容,但是不匹配该文件;“/”开始的模式匹配项目跟目录;如果一个模式不包含斜杠,则它匹配相对于当前 .gitignore 文件路径的内容,如果该模式不在 .gitignore 文件中,则相对于项目根目录。比如:

    • /TODO:表示仅仅忽略repo跟目录下的TODO文件,不包含子目录下的TODO文件。
    • /build/:表示忽略整个build目录及其下的所有文件。
    • bin/:表示忽略当前目录下的bin目录及其下所有的文件,bin文件不会被忽略。
    • build.sh:表示忽略当前目录下的build.sh文件。
  5. 以星号“*”通配多个字符,即匹配多个任意字符;使用两个星号“**” 表示匹配任意中间目录。比如:

    • doc/*.txt:表示忽略当前doc目录下的所有的以.txt结尾的文件,但是doc/design/arch.txt文件不会被忽略掉。
    • /*.c:表示忽略根目录下的所有的.c文件。
    • build/*.obj:表示忽略build目录下的所有.obj文件,但是build/http/http_core.obj不会忽略掉。
    • build/**/*.obj:表示忽略build目录,及其子目录,及其子目录的子目录和子子目录等等下的所有.obj文件。
    • **/*.a:表示忽略所有目录下的.a文件, *.a
    • /bin/*:表示忽略/bin/下的全部文件,不包含/bin/rtmp/hello文件。
    • bin/*:表示忽略所有文件路径带有bin字符串的文件,比如/bin/, /bin/subdir/等目录下的内容都会被忽略。
  6. 以问号"?"通配单个字符,即匹配一个任意字符。

  7. 以方括号"[]"包含单个字符的匹配列表,即匹配任何一个列在方括号中的字符。比如[abc]表示要么匹配一个a,要么匹配一个b,要么匹配一个c;如果在方括号中使用短划线分隔两个字符,表示所有在这两个字符范围内的都可以匹配。比如[0-9]表示匹配所有09的数字,[a-z]表示匹配任意的小写字母)。

  8. 以叹号"!“表示不忽略(跟踪)匹配到的文件或目录,即要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。需要特别注意的是:如果文件的父目录已经被前面的规则排除掉了,那么对这个文件用”!“规则是不起作用的。也就是说”!“开头的模式表示否定,该文件将会再次被包含,如果排除了该文件的父级目录,则使用”!"也不会再次被包含。可以使用反斜杠进行转义。

    #下面两条规则一起就是忽略掉/mtk/目录下所有的文件,但是不忽略/mtk/protocol.txt文件
    /mtk/*
    !/mtk/protocol.txt
     
    #下面这两条规则表示忽略掉/mtk/目录下所有内容,也忽略掉/mtk/protocol.txt文件
    /mtk/
    !/mtk/protocol.txt    
    

推荐一个自动生成 .gitignore 文件的网址:http://www.gitignore.io/。

五、总结

掌握好的Git文件管理技巧,可以让你的开发过程更加顺畅和高效。利用这些命令和方法,你可以轻松地管理文件,删除不必要的内容,以及忽略那些不需要跟踪的文件与文件夹。希望本文能帮助到你,让你的Git使用体验更上一层楼!
在这里插入图片描述

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

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

相关文章

数据集与数据库:有什么区别?

数据集和数据库是我们在处理数据时经常听到的两个常用词。虽然它们听起来很相似,但它们具有不同的特征并用于不同的用途。本文深入探讨数据集和数据库之间的主要区别,探索了它们的结构、数据类型和各种其他功能,以帮助您做出明智的决定&#…

回归预测|基于灰狼优化GWO-Transformer-BiLSTM组合模型的数据回归预测Matlab程序 多特征输入单输出

回归预测|基于灰狼优化GWO-Transformer-LSTM组合模型的数据回归预测Matlab程序 多特征输入单输出 文章目录 前言回归预测|基于灰狼优化GWO-Transformer-BiLSTM组合模型的数据回归预测Matlab程序 多特征输入单输出GWO-Transformer-BiLSTM 一、GWO-Transformer-BiLSTM模型二、实验…

uniapp打包H5的时候 清楚缓存(不安装依赖的前提下)

问题 在写项目的时候,打包好一个H5 发布成功,后来又重新打包新的包进行更新迭代,但是用户手机上还是上一个版本,本地缓存还是没有清除。 解决问题 步骤一:html不缓存 在html中,解决缓存的方法主要是依赖…

文章解读与仿真程序复现思路——电力自动化设EI\CSCD\北大核心《海上风电全直流汇集送出系统自适应振荡抑制策略》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

【小bug】springMVC通过json传参无法解析参数

0.问题描述 通过postman测试使用json传参的时候,发现不论怎么修改,都无法获取参数,解析对象。 反复检查请求url,请求内容均为正常。 以下是postman测试结果: 日志提示无法解析参数,内容如下:…

C# VideoCapture 多路视频播放

目录 效果 项目 代码 下载 效果 C#VideoCapture多路视频播放 项目 代码 using OpenCvSharp; using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Diagnostics; using System.Threading; using System.Threading.Tasks…

MS5046T/5047T/5048T/5048N_2kSPS、16bit Σ-Δ ADC

MS5046T/MS5047T/MS5048T/MS5048N 是适合高精 度、低成本测量应用的 16bit 模数转换器。其内部集成低 噪声可编程增益放大器、高精度 Δ-Σ 模数转换器和内部振 荡器。 MS5047T 、 MS5048T 、 MS5048N 内部还集成低温 漂基准和两路匹配的可编程电流源。 MS5048T/MS50…

计算机毕业设计 健身房管理系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点…

springboot考勤管理系统代码调试讲解论文

2 相关技术 2.1 MySQL数据库 该研究和开发的应用程序在数据操作中难以预料,有时候甚至发生改变。没办法直接从Word中写数据和信息,这不但不安全的,并且难以实现应用程序的功效。要实现所需要的文档存储作用,请尽快选择专业数据存…

【JPCS独立出版,EI稳定检索】2024年工业机器人与先进制造技术国际学术会议(IRAMT 2024,9月27-29)

2024年工业机器人与先进制造技术国际学术会议(IRAMT 2024)将于2024年9月27-29日在中国成都举办。 此次会议将围绕工业机器人、机电技术、机械及制造等领域的最新研究成果展开讨论,并广泛邀请了国内外领域内的著名专家与学者。会议旨在搭建一个…

Vision Transformer学习笔记

论文链接:https://arxiv.org/abs/2010.11929 项目链接:https://github.com/google-research/vision_transformer 本文代码链接:https://gitcode.com/gh_mirrors/de/deep-learning-for-image-processing/tree/master/pytorch_classification/v…

MS2350M/MS2350D——RF 检测器/控制器

MS2350M/MS2350D 是一款对数放大器芯片,相比 MS2351M/MS2351D ,它的应用频率范围的下限可低至 4MHz 。主要用于接收信号强度指示 (RSSI) 与功率放大器 控制,工作频率范围是 4MHz  3000MHz ,动态范围约 40dB 。 MS2350M/M…

【Qt】QWidget的windowIcon属性

QWidget的windowIcon属性 windowIcon表示窗口的图标 当我们使用默认的windowIcon的时候,其窗口的图标如下: API说明 windowIcon() 获取到控件的窗⼝图标. 返回 QIcon 对象. setWindowIcon(const QIcon& icon) 设置控件的窗⼝图标. 在Qt中&…

CTFHUB-SQL注入-过滤空格

目录 查询数据库名 查询数据库中的表 查询表中字段 查询表中数据 空格被过滤,使用 /**/ 绕过 查询数据库名 -1/**/union/**/select/**/1,database() 查询数据库中的表 -1/**/union/**/select/**/1,group_concat(table_name)/**/from/**/information_schema.t…

多分类实战:一文掌握 One-vs-All 策略

引言 在机器学习领域,分类问题是常见的任务之一。当我们面对的问题不仅限于两类分类(如正例和反例),而是需要处理多个类别时,就会遇到多类分类问题。例如,在手写数字识别中,我们需要将输入图像…

Linux 之 shell指令个人解析

1.echo 类似printf 都是在屏幕上显示字符 2.$ 可以在引用变量时使用 3.read 可以读取你输入的字符,有八个属性 -p可以让读取的东西赋值为变量 4.加减乘除等算法的应用 要用到$(( 算式 )) 注:total等于号不能空开,一空开就错误 5.te…

Java读写EM4305卡、将4305卡制做成4100ID卡

EM4305/EM4205卡是采用瑞士EM微电子公司工作频率为125kHz,具有读、写功能的非接触式RFID射频芯片,它具有功耗低、可提供多种数据传输速率和数据编码方法等特点,适合射频芯片ISO 11784/11785规范,该芯片被广泛应用于动物识别和跟踪…

传智教育引通义灵码进课堂,为技术人才教育学习提效

7 月 17 日,阿里云与传智教育在阿里巴巴云谷园区签署合作协议,双方将基于阿里云智能编程助手通义灵码在课程共建、品牌合作及产教融合等多个领域展开合作,共同推进 AI 教育及相关业务的发展,致力于培养适应未来社会需求的高素质技…

PyTorch之loading fbgemm.dll异常的解决办法

前言 PyTorch是一个深度学习框架,当我们在本地调试大模型时,可能会选用并安装它,目前已更新至2.4版本。 一、安装必备 1. window 学习或开发阶段,我们通常在window环境下进行,因此需满足以下条件: Windo…

tkinter绘制组件(43)——对话框

tkinter绘制组件(43)——对话框 引言布局窗口初始化对话框类型弹窗显示和窗口冻结内容返回信息提示输入对话框 函数封装 效果测试代码最终效果 github项目pip下载结语 引言 严格来说,对话框是控件的组合,不是一个控件&#xff0c…