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

避免文件混乱: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.rhkb.cn/news/400937.html

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

相关文章

详细分析JWT的基本知识(附Demo)

目录 前言1. 基本知识2. JWT验证过程3. Demo 前言 对于Java的基本知识推荐阅读: java框架 零基础从入门到精通的学习路线 附开源项目面经等(超全)【Java项目】实战CRUD的功能整理(持续更新) 1. 基本知识 紧凑的、U…

《Kotlin核心编程》2021版复习记录

目录 0 前言1 基础语法1.1 数据类型1.2 数组1.3 集合1.4 遍历数据和集合1.5 函数声明返回值类型1.6 var 和 val 2 高阶函数和lambda表达式2.1 高阶函数2.2 方法和成员引用2.3 链式调用2.4 扩展函数2.5 面向表达式编程2.5.1 when表达式2.5.2 for循环2.5.3 in 2.6 字符串相等 3 面…

手撕初阶数据结构之---排序

1.排序概念及运用 排序:所谓排序,就是使⼀串记录,按照其中的某个或某些关键字的⼤⼩,递增或递减的排列起来的操作。 常见的排序算法 直接插入排序的时间复杂度是O(N^2) 这个是最差的情况下,就是大的在前面&#xff…

被老韭菜阴阳了?未来一个人最核心的能力:守脑如玉——早读(逆天打工人爬取热门微信文章解读)

tomato 版本TO? 引言Python 代码第一篇 洞见 未来一个人最核心的能力:守脑如玉第二篇 股友见闻结尾 (你看出本质了吗?) 引言 昨晚听别人的分析 好神奇 我会惊叹 为什么大家看到的都是同样的东西 而别人进行思考 思考…

Python 在PDF中添加条形码、二维码

在PDF中添加条码是一个常见需求,特别是在需要自动化处理、跟踪或检索PDF文件时。作为一种机器可读的标识符,PDF中的条码可以包含各种类型的信息,如文档的唯一标识、版本号、日期等。以下是一篇关于如何使用Python在PDF中添加条形码或二维码的…

Python开源项目周排行 2024年第13周

#2024年第13周2024年8月5日1roop一款基于深度学习框架TensorFlow和Keras开发的单图换脸工具包,提供了丰富的功能和简洁易用的界面,使得用户可以轻松实现单图换脸操作。支持多张人脸替换成同一个人脸,勾选多人脸模式即可 人脸替换 高清修复自…

SPDK源码剖析一hello_world程序

SPDK初识之hello_world程序分析 首先是hello_world程序整体框架分析 int main(int argc, char **argv) {rc parse_args(argc, argv, &opts);if (spdk_env_init(&opts) < 0) { // spdk环境初始化&#xff0c;最终调用dpdk环境初始化}// 扫描设备&#xff0c;将驱…

bluecmsphp代码审计

bluecms代码审计 (一) 运行环境需求&#xff1a; 可用的 httpd 服务器&#xff08;如 Apache、Zeus、IIS 等&#xff09; PHP 4.3.0 及以上 MySQL 4.1 及以上配置文件审计 看到uploads/install/include/common.inc.php 当然我们可能自己根本不知道那个是重要的文件&#x…

C++《类和对象》(上)

在之前的C入门基础知识中我们了解了C的发展过程已经重要性&#xff0c;还初步了解了C中一些相比C语言特有的知识点&#xff0c;例如命名空间、缺少参数、函数重载、引用等&#xff0c;接下来在本篇中我们将开始C整个体系中非常重要的一个知识章节——类和对象&#xff0c;类和对…

Unity新输入系统 之 InputActions(输入配置文件)

本文仅作笔记学习和分享&#xff0c;不用做任何商业用途 本文包括但不限于unity官方手册&#xff0c;unity唐老狮等教程知识&#xff0c;如有不足还请斧正​ 首先你应该了解新输入系统的基本单位Unity新输入系统 之 InputAction&#xff08;输入配置文件最基本的单位&#xff0…

React 学习——react项目中加入echarts图

实现的代码如下&#xff1a; import * as echarts from echarts import { useEffect, useRef } from react; const Home ()>{const chartRef useRef(null);useEffect(()>{// const chartDom document.getElementById(main);//使用id获取节点const chartDom chartRef…

【区块链+乡村振兴】“蜜链盟”乡村振兴基层治理数字化平台 | FISCO BCOS应用案例

在国家战略政策推动和新一代信息化发展应用的合力之下&#xff0c;数字乡村是互联网化、信息化和数字化在农业农村经 济社会发展中的表现。为进一步加强乡村基层治理&#xff0c;根据《中共海南省委农村工作领导小组办公室海南省农业农 村厅关于在我省乡村治理中推广运用积分制…

用exceljs和file-saver插件实现纯前端表格导出Excel(支持样式配置,多级表头)

exceljs在Jquery&#xff08;HTML&#xff09;和vue项目中实现导出功能 前言Jquery&#xff08;HTML&#xff09;中实现导出第一步&#xff0c;先在项目本地中导入exceljs和file-saver包第二步&#xff0c;封装导出Excel方法&#xff08;可直接复制粘贴使用&#xff09;第三步&…

Java 实现 B树(通俗易懂)

目录 一.概念 二.节点定义 三.插入操作 1.查找位置 2.插入 3.分裂 四.B树和B*树 1.B树 2.B*树 一.概念 B树是一颗多叉平衡树&#xff0c;空树也是多叉平衡树。 一颗M阶的B树要满足以下条件&#xff1a; 1.根节点至少有两个孩子&#xff1b; 2.每个非根节点至少有(上…

机械学习—零基础学习日志(如何理解线性代数2)

零基础为了学人工智能&#xff0c;正在快乐学习&#xff0c;每天都长脑子 引言 在平面中&#xff0c;直线的定义可以理解为&#xff0c;任意缩放同一个平面向量得到所有点的集合。 所以要得到一个三维空间中的直线&#xff0c;只需要将这个向量改成三维向量即可。 什么是线…

uniapp加载第三方字体方案对比(附原生微信小程序方案)

文章目录 官方文档uniapp文档微信小程序文档 下载字体包引入方案限制微信小程序限制uniapp的限制 方案对比方案1&#xff1a;CSS本地加载方案2&#xff1a;CSS远程加载方案3&#xff1a;转换为base64&#xff0c;然后通过css引入方案4&#xff1a;使用uni.loadFontFace() 页面使…

(Jmeter、Fiddler)脚本转换Loadrunner脚本

背景&#xff1a;公司政治任务、各种体系文档要留档&#xff0c;但有些不在体系内的工具生成的脚本需要转化到体系内以备留档。 一、Loadrunner代理设置 开始录制配置&#xff1a; Record->Remote Application via LoadRunner Proxy LoadRrunner Proxy listens on port-…

米联客-FPGA程序设计Verilog语法入门篇连载-19 Verilog语法_低功耗设计

软件版本&#xff1a;无 操作系统&#xff1a;WIN10 64bit 硬件平台&#xff1a;适用所有系列FPGA 板卡获取平台&#xff1a;https://milianke.tmall.com/ 登录“米联客”FPGA社区 http://www.uisrc.com 视频课程、答疑解惑&#xff01; 1概述 本小节讲解Verilog语法的低功…

Spark MLlib 特征工程(下)

Spark MLlib 特征工程(下) 前面我们提到&#xff0c;典型的特征工程包含如下几个环节&#xff0c;即预处理、特征选择、归一化、离散化、Embedding 和向量计算&#xff0c;如下图所示。 在上一讲&#xff0c;我们着重讲解了其中的前 3 个环节&#xff0c;也就是预处理、特征选…

java---概念

一.配置环境&#xff08;三个变量&#xff09; 1.JAVA_HOME&#xff08;记录Java安装文件的路径&#xff09; 2.PATH&#xff08;系统直找的路径&#xff09; 3.CLASSPATH&#xff08;Java程序路径&#xff09; .;%JAVA_HOME%\lib 二.第一个Java程序 源代码&#xff1a; so…