Git实用指南:忽略文件、命令别名、版本控制、撤销修改与标签管理

目录

1.忽略特殊文件

1.1.那如何配置我们需要忽略的文件的呢?

1.2.如何检验效果?

2.给命令配置别名

3.基本操作之版本回退

3.1.使用场景:

3.2.使用方法:

4.撤销修改

情况一:对于工作区的代码,还没有 add 

情况二:已经 add ,但没有 commit 

情况三:已经add,并且也commit了

表格总结:

5.基本操作之删除文件

6.标签管理

6.1.理解标签

6.2.创建标签

6.3.操作标签

7.图形化的方式展示分支和合并的历史

1.忽略特殊文件

在日常开发中,我们有些文件不想或者不应该提交到远端,比如保存了数据库密码的配置文件,那怎么让Git知道呢?在Git工作区的根目录下创建⼀个特殊的 .gitignore 文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件了。
不需要从头写 .gitignore 文件,gitee在创建仓库时就可以为我们生成,不过需要我们主动勾选⼀下:

1.1.那如何配置我们需要忽略的文件的呢?

我们只需要vim打开.gitignore文件,将需要忽略的文件后缀书写进去即可。

格式为:

*后缀名

例如我们想忽略以 .so 和 .ini 结尾所有文件, .gitignore 的内容如下: 

# My configurations:
*.ini
*.so

当我们想要把一些确定的文件不按照.gitignore规则,

把指定文件排除在 .gitignore 规则外的写法就是 ! +文件名,所以,只需把例外文件添加进去即可。

# 排除所有.开头的隐藏⽂件:
.*
# 不排除.gitignore
!.gitignore

1.2.如何检验效果?

检验 .gitignore 的标准就是 git status 命令是不是说 working tree clean 。我们发现Git并没有提示在工作区中有文件新增,那么 .gitignore 忽略特定文件就生效了!

git check-ignore命令

你发现,可能是 .gitignore 写得有问题,需要找出来到底哪个规则写错了,比如说a.so文件是要被添加的,可以用 git check-ignore 命令检查:

git check-ignore -v a.so
.gitignore:3:*.so a.so

Git会告诉我们, .gitignore 的第3行规则忽略了该文件,于是我们就可以知道应该修订哪个规则。

2.给命令配置别名

在我们使用Git期间,有些命令敲的时候着实让人头疼(太长了。。),幸运的是,git支持对命令进行简化!

举个例子,将 git status 简化为 git st ,对应的命令为:

git config --global alias.st status

--global 参数是全局参数,也就是这些命令在这台电脑的所有Git仓库下都有用。如果不加,那只针对当前的仓库起作用。

3.基本操作之版本回退

3.1.使用场景:

之前我们也提到,过Git 能够管理文件的历史版本,这也是版本控制器重要的能⼒。如果有⼀天你发现之前的⼯作做的出现了很⼤的问题,需要在某个特定的历史版本重新开始,这个时候,就需要版本 回退的功能了。

3.2.使用方法:

执⾏ git reset 命令⽤于回退版本,可以指定退回某⼀次提交的版本。要解释⼀下“回退”本质是要将版本库中的内容进⾏回退,⼯作区或暂存区是否回退由命令参数决定:

git reset 命令语法格式为: git reset [--soft | --mixed | --hard] [HEAD] 

  • --mixed 为默认选项,使⽤时可以不⽤带该参数。该参数将暂存区的内容退回为指定提交版本内 容,⼯作区⽂件保持不变。
  •  --soft 参数对于⼯作区和暂存区的内容都不变,只是将版本库回退到某个指定版本。
  •  --hard 参数将暂存区与⼯作区都退回到指定版本。切记⼯作区有未提交的代码时不要⽤这个命 令,因为⼯作区会回滚,你没有提交的代码就再也找不回了,所以使⽤该参数前⼀定要慎重。
  • HEAD 说明: 可直接写成commit id,表示指定退回的版本

  • HEAD 表示当前版本
  • HEAD^ 上一个版本
  • HEAD^^ 上上一个版本。以此类推...

可以使用 ~数字表示

  • HEAD~0 表示当前版本:
  • HEAD~1 上一个版本
  • HEAD^2 上上一个版本以此类推...

查看历史提交指令 

git log --pretty=oneline

可以看到之前版本的commit id用来版本回退。

例如我们可以用下面的指令来回归到version2版本

git log --pretty=oneline
d95c13ffc878a55a25a3d04e22abfc7d2e3e1383 (HEAD -> master) add version3
14c12c32464d6ead7159f5c24e786ce450c899dd add version2
cff9d1e019333318156f8c7d356a78c9e49a6e7b add version1
...git reset --hard 
14c12c32464d6ead7159f5c24e786ce450c899dd

到这里一般回退功能就演示完了,但现在如果我后悔了,想再回到 version3怎么办?我们可以继续使用 git reset 命令,回退到 version 3 版本,但我们必须要拿到 version 3 的 commit id 去指定回退的版本!
但我们看到了 git log并不能打印出 version 3的 commit id ,运气好的话我们可以从终端上去找找之前的记录,运气不好的话 commit id 已经被我们搞丢了。
Git 还提供了一个 git reflog 命令能补救一下,该命令用来记录本地的每一次命令。

git reflog
14c12c3 (HEAD -> master) HEAD@{0}: reset: moving to 
14c12c32464d6ead7159f5c24e786ce450c899dd
d95c13f HEAD@{1}: commit: add version3
14c12c3 (HEAD -> master) HEAD@{2}: commit: add version2
cff9d1e HEAD@{3}: commit: add version1
594da695 HEAD@{4}: commit: add modify ReadMe file
23807c5 HEAD@{5}: commit: add 3 files
c614289 HEAD@{6}: commit (initial): commit my first file

这样,你就可以很方便的找到你的所有操作记录了,但 d95c13f这个是啥东西?这个是 version3 的 commit id 的部分。没错,Git 版本回退的时候,也可以使用部分 commit id 来代表目标版本。

可往往是理想很丰满,现实很骨感。在实际开发中,由于长时间的开发了,导致 commit id 早就找
不到了,可突然某一天,我又想回退到 version3,那该如何操作呢?貌似现在不可能了。。。

4.撤销修改

如果我们在我们的工作区写了很长时间代码,越写越写不下去,觉得自己写的实在是垃圾,想恢复到 上⼀个版本。

情况一:对于工作区的代码,还没有 add 

我们可以使用 git checkout -- [file]命令让工作区的文件回到最近一次 add 或 commit 时的状态。

要注意 git checkout -- [file]命令中--的很重要,切记不要省略,一旦省略,该命令就变为其他意思了!

情况二:已经 add ,但没有 commit 

让我们来回忆一下学过的 git reset 回退命令,该命令如果使用 --mixed 参数,可以将暂存区
的内容退回为指定的版本内容,但工作区文件保持不变。那我们就可以回退下暂存区的内容了!!!

注意--mixed参数是默认参数,是可以省略的。

# --mixed 是默认参数,使⽤时可以省略git reset HEAD ReadMe

情况三:已经add,并且也commit了

不要担心,我们可以 git reset --hard HEAD^ 回退到上一个版本!

不过,这是有前提的,就是你还没有把自己的本地版本库推送到远程。还记得Git是分布式版本控制系统吗?我们后面会讲到远程版本库,一旦你推送到远程版本库,你就真的惨了……

表格总结:

5.基本操作之删除文件

在Git中,删除也是⼀个修改操作,我们实战⼀下,如果要删除 file5文件,怎么搞呢?如果你这样做了:

ls
file1 file2 file3 file4 file5 ReadMe
rm file5

但这样直接删除是没有⽤的,反而徒增烦恼, git status 命令会⽴刻告诉你哪些文件被删除了

此时,工作区和版本库就不一致了,要删文件,目前除了要删工作区的文件,还要清除版本库的文
件。
一般走到这里,有两种可能:

  1. 确实要从版本库中删除该文件
  2. 不小心删错了

对第二种情况,很明显误删,需要使用 git 来进行恢复,很简单,我们刚学过(删除也是修改):

git checkout -- file5
直接使用这个指令即可。

对于第⼀种情况,很明显是没有删完,我们只删除了⼯作区的⽂件。这时就需要使⽤git rm 将文件从暂存区和⼯作区中删除,并且commit :

git rm file5

git commit -m"deleted file5"

git rm file5
rm 'file5'
git status
On branch master
Changes to be committed:(use "git restore --staged <file>..." to unstage)deleted: file5
git commit -m"deleted file5"
[master 5476bde] deleted file51 file changed, 0 insertions(+), 0 deletions(-)delete mode 100644 file5
git status
On branch master
nothing to commit, working tree clean

现在,文件就从版本库中被删除了

6.标签管理

6.1.理解标签

标签 tag ,可以简单的理解为是对某次 commit 的一个标识,相当于起了一个别名。例如,在项目
发布某个版本的时候,针对最后一次 commit 起一个 v1.0 这样的标签来标识里程碑的意义。
这有什么用呢?相较于难以记住的 commit id ,tag 很好的解决这个问题,因为 tag 一定要给
个让人容易记住,且有意义的名字。当我们需要回退到某个重要版本时,直接使用标签就能很快定位到。

6.2.创建标签

在Git中打标签非常简单,首先,切换到需要打标签的分支上

然后,敲命令 git tag [name] 就可以打⼀个新标签:

可以⽤命令 git tag 查看所有标签:

默认标签是打在最新提交的 commit 上的。那如何在指定的commit上打标签呢?⽅法是找到历史提 交的commit id,然后打上就可以了,⽰例如下:

# 历史记录
hyb@139-159-150-152:~/git_teaching$ git log --pretty=oneline --abbrev-commit
97811ab (HEAD -> master, tag: v1.0, origin/master, origin/HEAD) add .gitignore
60e6b0a update README.md.
7ce3183 create file.txt
c6ce3f0 Initial commit
# 对 Initial commit 这次提交打标签
hyb@139-159-150-152:~/git_teaching$ git tag v0.9 c6ce3f0
hyb@139-159-150-152:~/git_teaching$ git tag
v0.9
v1.0

注意,标签不是按时间顺序列出,而是按字母排序的。
可以用 git show [tagname]查看标签信息。

6.3.操作标签

如果标签打错了,也可以删除

git tag -d [tagname]

hyb@139-159-150-152:~/git_teaching$ git tag 
v0.9
v1.0
hyb@139-159-150-152:~/git_teaching$ git tag -d v0.9 
Deleted tag 'v0.9' (was c6ce3f0)
hyb@139-159-150-152:~/git_teaching$ git tag 
v1.0

因为创建的标签都只存储在本地,不会自动推送到远程。所以,打错的标签可以在本地安全删除。
如果要推送某个标签到远程,使用命令 git push origin <tagname>

如果标签已经推送到远程,要删除远程标签就⿇烦⼀点,先从本地删除;然后,从远程删除。删除命令也是push,但是格式如下:

hyb@139-159-150-152:~/git_teaching$ git tag
v1.0
hyb@139-159-150-152:~/git_teaching$ git tag -d v1.0 
Deleted tag 'v1.0' (was 97811ab)
hyb@139-159-150-152:~/git_teaching$ git push origin :refs/tags/v1.0
remote: Powered by GITEE.COM [GNK-6.4]
To gitee.com:hyb91/git_teaching.git- [deleted] v1.0

7.图形化的方式展示分支和合并的历史

git log --graph --abbrev-commit

绿色代表dev分支上的,红色代表master分支,注意分场景使用(颜色是随机的,下次可能绿色就是主分支)

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

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

相关文章

Pytorch深度学习指南 卷I --编程基础(A Beginner‘s Guide) 第1章 一个简单的回归

本章正式开始使用pytorch的接口来实现对应的numpy的学习的过程&#xff0c;来学习模型的实现&#xff0c;我们会介绍numpy是如何学习的&#xff0c;以及我们如何一步步的通过torch的接口来实现简单化的过程&#xff0c;优雅的展示我们的代码&#xff0c;已经我们的代码完成的事…

String.join()

String.join() 方法是 Java 8 及其以上版本中的一个方法&#xff0c;用于将多个字符串用指定的分隔符连接成一个字符串。 其语法为&#xff1a; java复制 String joinedString String.join(CharSequence delimiter, CharSequence... elements); 在这个方法中&#xff1a;…

FastAPI 数据库配置最佳实践

FastAPI 数据库配置最佳实践 1. 基础配置 1.1 数据库连接配置 from sqlalchemy import create_engine, event from sqlalchemy.orm import sessionmaker, declarative_base from sqlalchemy.pool import QueuePool from sqlalchemy.exc import SQLAlchemyError import loggi…

深度解析 Java 的幻读现象与应对策略

目录 一、幻读现象的本质 二、幻读在 Java 数据库编程中的体现 三、幻读带来的问题 四、应对幻读的策略 1. 数据库隔离级别 2. 应用层解决方案 五、总结 在 Java 的数据库编程领域&#xff0c;幻读是一个不容忽视的概念。它涉及到数据库事务处理过程中数据一致性的关键问…

Glary Utilities Pro 多语便携版系统优化工具 v6.21.0.25

Glary Utilities是一款功能强大的系统优化工具软件&#xff0c;旨在帮助用户清理计算机垃圾文件、修复系统错误、优化系统性能等。 软件功能 清理和修复&#xff1a;可以清理系统垃圾文件、无效注册表项、无效快捷方式等&#xff0c;修复系统错误和蓝屏问题。 优化和加速&…

【贪心算法】洛谷P1106 - 删数问题

2025 - 12 - 26 - 第 46 篇 【洛谷】贪心算法题单 - 【贪心算法】 - 【学习笔记】 作者(Author): 郑龙浩 / 仟濹(CSND账号名) 目录 文章目录 目录P1106 删数问题题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示思路代码 P1106 删数问题 题目描述 键盘输入一个高…

Oracle 创建并使用外部表

目录 一. 什么是外部表二. 创建外部表所在的文件夹对象三. 授予访问外部表文件夹的权限3.1 DBA用户授予普通用户访问外部表文件夹的权限3.2 授予Win10上的Oracle用户访问桌面文件夹的权限 四. 普通用户创建外部表五. 查询六. 删除 一. 什么是外部表 在 Oracle 数据库中&#x…

基于FPGA的BPSK+costas环实现,包含testbench,分析不同信噪比对costas环性能影响

目录 1.算法仿真效果 2.算法涉及理论知识概要 3.Verilog核心程序 4.完整算法代码文件获得 1.算法仿真效果 本作品是之前作品的改进和扩展&#xff1a; 1.m基于FPGA的BPSK调制解调通信系统verilog实现,包含testbench,包含载波同步_csdn基于fpga的bpsk-CSDN博客 2.m基于FP…

Linux 目录操作详解

Linux目录操作详解 1. 获取当前工作目录1.1 getcwd()1.2 get_current_dir_name() 2. 切换工作目录2.1 chdir() 3. 创建和删除目录3.1 mkdir()3.2 rmdir() 4. 获取目录中的文件列表4.1 opendir() 打开目录4.2 readdir() 读取目录内容4.3 closedir() 关闭目录 5. dirent 结构体6.…

Spring 依赖注入详解:创建 Bean 和注入依赖是一回事吗?

1. 什么是依赖注入&#xff08;Dependency Injection&#xff0c;DI&#xff09;&#xff1f; 依赖注入 是 Spring IoC&#xff08;控制反转&#xff09;容器的核心功能。它的目标是将对象的依赖&#xff08;如其他对象或配置&#xff09;从对象本身中剥离&#xff0c;由容器负…

AI时代的网络安全:传统技术的落寞与新机遇

AI时代的网络安全&#xff1a;传统技术的落寞与新机遇 在AI技术飞速发展的浪潮中&#xff0c;网络安全领域正经历着前所未有的变革。一方面&#xff0c;传统网络安全技术在面对新型攻击手段时逐渐显露出局限性&#xff1b;另一方面&#xff0c;AI为网络安全带来了新的机遇&…

后端开发Web

Maven Maven是apache旗下的一个开源项目&#xff0c;是一款用于管理和构建java项目的工具 Maven的作用 依赖管理 方便快捷的管理项目依赖的资源&#xff08;jar包&#xff09;&#xff0c;避免版本冲突问题 统一项目结构 提供标准、统一的项目结构 项目构建 标准跨平台(…

前沿技术趋势洞察:2024年技术的崭新篇章与未来走向!

引言 时光飞逝&#xff0c;2024年已经来临&#xff0c;回顾过去一年&#xff0c;科技的迅猛进步简直让人目不暇接。 在人工智能&#xff08;AI&#xff09;越来越强大的今天&#xff0c;我们不再停留在幻想阶段&#xff0c;量子计算的雏形开始展示它的无穷潜力&#xff0c;Web …

【10.2】队列-设计循环队列

一、题目 设计你的循环队列实现。 循环队列是一种线性数据结构&#xff0c;其操作表现基于 FIFO&#xff08;先进先出&#xff09;原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。 循环队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普…

博客之星2024年度总评选——我的年度创作回顾与总结

2024年&#xff0c;是我在CSDN博客上持续耕耘、不断成长的一年。在此&#xff0c;与大家分享一下我的年度创作回顾与总结。 一、创作成长与突破 在人工智能领域&#xff0c;技术迭代迅速&#xff0c;知识更新频繁。为了保持自己的竞争力&#xff0c;在今年&#xff0c;我始终…

IDEA运行Java项目总会报程序包xxx不存在

我的在另外一台电脑上跑是没有问题的&#xff0c;在新的电脑上跑的时候&#xff0c;又出现了这个恶心的问题...... 思来想去&#xff0c;唯一的问题就是我的mavn环境没的配置好 如何在本地部署mavn环境&#xff0c;这里推荐一篇很好的文章&#xff1a; Maven安装与配置&…

java 根据前端传回的png图片数组,后端加水印加密码生成pdf,返回给前端

前端传回的png图片数组&#xff0c;后端加水印加密码生成pdf&#xff0c;返回给前端 场景&#xff1a;重点&#xff1a;maven依赖controllerservice 场景&#xff1a; 当前需求&#xff0c;前端通过html2canvas将页面报表生成图片下载&#xff0c;可以仍然不满意。 需要java后…

数据分库分表和迁移方案

在我们业务快速发展的过程中&#xff0c;数据量必然也会迎来突飞猛涨。那么当我们的数据量百倍、千倍、万倍、亿倍增长后&#xff0c;原有的单表性能就不能满足我们日常的查询和写入了&#xff0c;此时数据架构就不得不进行拆分&#xff0c;比如单表拆分成10张表、100张表、单个…

线上突发:MySQL 自增 ID 用完,怎么办?

线上突发&#xff1a;MySQL 自增 ID 用完&#xff0c;怎么办&#xff1f; 1. 问题背景2. 场景复现3. 自增id用完怎么办&#xff1f;4. 总结 1. 问题背景 最近&#xff0c;我们在数据库巡检的时候发现了一个问题&#xff1a;线上的地址表自增主键用的是int类型。随着业务越做越…

[Java] Solon 框架的三大核心组件之一插件扩展体系

1、Solon 的三大核心组件 核心组件说明Plugin 插件扩展机制提供“编码风格”的扩展体系Ioc/Aop 应用容器提供基于注入依赖的自动装配体系ContextHandler 通用上下文处理接口提供“开放式处理”适配体系&#xff08;俗称&#xff0c;三元合一&#xff09; 2、Solon Plugin 插件…