Git代码管理工具 — 3 Git基本操作指令详解
目录
1 获取本地仓库
2 基础操作指令
2.1 基础操作指令框架
2.2 git status查看修改的状态
2.3 git add添加工作区到暂存区
2.4 提交暂存区到本地仓库
2.5 git log查看提交日志
2.6 git reflog查看已经删除的记录
2.7 git reset版本回退
2.8 添加文件至忽略列表
1 获取本地仓库
要使用Git进行代码的版本控制,确实需要首先获取或创建一个本地仓库,步骤如下:
1)创建本地仓库目录:在电脑创建一个新的文件夹,例如命名为git_
test,
这个文件夹将作为你的本地Git仓库。
2)打开Git Bash:进入这个新创建的目录后,可以通过右键点击文件夹空白处,选择"Git Bash Here"来打开Git Bash窗口。右键菜单中在上一节安装中有默认安装此选项。
3)初始化Git仓库:在Git Bash窗口中,输入命令git init
,git init
命令会初始化一个新的Git仓库,创建必要的Git文件和目录结构。
4)检查.git目录:执行git init
命令后,Git会在当前目录下创建一个名为.git
的隐藏目录。这个目录包含了Git仓库的所有元数据,例如提交历史、分支信息等。
2 基础操作指令
2.1 基础操作指令框架
Git工作目录下对于文件的修改(增加、删除、更新)会存在几个状态,这些修改的状态会随着我们执行Git的命令而发生变化。
参考黑马程序员教程
2.2 git status查看修改的状态
git status
是一个非常有用的Git命令,它用于显示当前Git仓库的状态。下面是git status
命令的一些常见输出示例:
-
未跟踪的文件:显示当前目录下未被Git跟踪的新文件。
Untracked files: (use "git add <file>..." to include in what will be committed) newfile.txt
-
已修改的文件:显示已经被Git跟踪但自上次提交以来有修改的文件。
Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: existingfile.txt
-
已暂存的文件:显示已经被添加到暂存区,准备下一次提交的文件。
Changes to be committed: (use "git reset HEAD <file>..." to unstage) new file: newfile.txt modified: existingfile.txt
首先通过touch创建一个文件,新创建的文件应该是未跟踪的文件:
2.3 git add添加工作区到暂存区
git add
是一个用于将更改添加到Git的暂存区的命令。暂存区是Git中的一个临时区域。以下是一些常用的 git add
命令用法:
-
添加单个或多个文件:
git add file1.txt file2.txt
-
添加所有更改:
.
表示当前目录下的所有文件,而-A
表示所有更改,包括删除的文件。
git add .
或者
git add -A
- 添加修改过的文件和新文件:这将只添加修改过的文件和被删除的文件到暂存区,但不包括新文件。
git add -u
- 使用通配符添加文件:这将添加当前目录下所有以
.txt
结尾的文件到暂存区。
git add *.txt
将上面添加的文件暂存到缓冲区中,添加后的文件应该是已暂存的文件:
2.4 提交暂存区到本地仓库
当使用 git add
将更改添加到暂存区后,就可以使用 git commit
来保存这些更改到本地仓库的历史记录中。以下是一些基本的 git commit
命令用法:
- 提交暂存区的更改:
git commit -m "Your commit message"
-m
选项后面跟着的是提交信息,自定义的描述。如果你不使用 -m
选项,Git 会打开默认的文本编辑器让你输入提交信息:
- 提交所有更改(包括未跟踪的文件):
-a
选项会将所有已跟踪的文件的更改和新文件添加到暂存区,然后执行提交。注意,这不会包括已经被删除的文件。
git commit -a -m "Your commit message"
- 修改最后一次提交:
--amend
选项允许你修改最后一次提交的信息或添加额外的更改。如果你需要修改最后一次提交,可以使用:
git commit --amend -m "Your new commit message"
- 使用交互式暂存: 如果你想要对暂存区的更改进行更细致的控制,这将允许你选择哪些更改包含在提交中:
git commit -i
- 使用Git的图形用户界面提交: 如果你更喜欢使用图形界面,可以使用:
git gui commit
将上面缓存区的文件添加到代码仓库,并添加文件的描述信息:
2.5 git log查看提交日志
git log
是一个用于查看Git仓库提交历史的命令。它可以显示从最近到最旧的提交记录,包括提交的作者、日期、提交信息等。以下是一些常用的 git log
选项:
- 查看所有提交记录(常用):
git log
- 查看指定数量的提交:这里的
-n
选项后面跟着数字,表示你想要查看的提交记录的数量。
git log -n 5
- 查看提交的统计信息:将显示每个提交的文件更改统计,包括哪些文件被修改、添加或删除,以及行的更改数量。
git log --stat
- 查看每次提交的内容差异:
-p
选项会显示每个提交的差异(即补丁),让你可以看到具体的代码更改。
git log -p
- 查看图形化的提交历史:这将以图形化的方式展示分支和合并的历史。
git log --graph
- 查看某个特定文件或目录的提交历史:
git log -- path/to/file_or_directory
- 查看某个作者的提交:
git log --author="author name"
- 查看最近的一次提交:
git log -1
查看代码仓库中的文件修改日志信息:
使用git log --graph
进行图形化的显示。
2.6 git reflog查看已经删除的记录
git reflog
命令可以查看最近的Git引用操作记录,每条记录对应一个唯一的引用ID,显示了对引用的改变以及对应的提交ID。可以帮助你找回意外删除或重置的提交,从而恢复代码状态或查看历史操作记录。
使用 git reflog
的一些场景:
-
找回丢失的提交:如果你执行了
git reset --hard
并且后悔了,你可以使用git reflog
找到丢失的提交的哈希值,然后使用git reset --hard <commit-hash>
来恢复。 -
理解HEAD的移动:如果你不确定HEAD是如何到达当前位置的,
reflog
可以给你一个详细的历史记录。 -
恢复分支状态:如果你不小心删除了一个分支,
reflog
可以帮助你找到分支的最后状态,并恢复它。
2.7 git reset版本回退
git reset
可以用来撤销提交、修改暂存区中的文件、重置分支指针等。以下是一些常见的 git reset
用法:
- 重置暂存区,但不更改工作目录:不带任何参数的
git reset
命令会将暂存区中的所有更改重置为最后一次提交的状态,但不会影响工作目录中的文件。<commit>为
移动HEAD和当前分支到指定的提交,可以使用git log(git-log)
或git reflog
指令查看
git reset
或
git reset <commit>
- 重置暂存区,同时更新工作目录:使用
--hard
选项会将暂存区和工作目录都重置为最后一次提交的状态。这会丢失所有未提交的更改。
git reset --hard
或
git reset --hard <commit>
- 重置暂存区,但不更新工作目录(只保留更改):使用
--soft
选项会将暂存区重置为最后一次提交的状态,但保留工作目录中的更改,这样你可以重新暂存这些更改并提交。
git reset --soft
或
git reset --soft <commit>
使用git reset --hard <commit>
命令回退到指定版本。
但是如果操作失误,想取消怎么办?
- 第一种:如果没回退之前第一条的
<commit>
还在命令行中,任然可通过git reset --hard <commit>
回退。 - 第二种:如果commit已经在命令行中已经清除,可通过
git reflog
查看之前的操作状态<commit>
,然后使用git reset --hard <commit>
回退。
2.8 添加文件至忽略列表
一般我们总会有些文件无需纳入Git 的管理,也不希望它们总出现在未跟踪文件列表。 通常都是些自动生成的文件,比如日志文件,或者编译过程中创建的临时文件等。 在这种情况下,我们可以在工作目录中创建一个名为 .gitignore 的文件(文件名称固定),列出要忽略的文件模式。下面是一个示例:
相关文章:

Git代码管理工具 — 3 Git基本操作指令详解
目录 1 获取本地仓库 2 基础操作指令 2.1 基础操作指令框架 2.2 git status查看修改的状态 2.3 git add添加工作区到暂存区 2.4 提交暂存区到本地仓库 2.5 git log查看提交日志 2.6 git reflog查看已经删除的记录 2.7 git reset版本回退 2.8 添加文件至忽略列表 1 获…...

Linux——多线程(五)
1.线程池 1.1初期框架 thread.hpp #include<iostream> #include <string> #include <unistd.h> #include <functional> #include <pthread.h>namespace ThreadModule {using func_t std::function<void()>;class Thread{public:void E…...

张量分解(4)——SVD奇异值分解
🍅 写在前面 👨🎓 博主介绍:大家好,这里是hyk写算法了吗,一枚致力于学习算法和人工智能领域的小菜鸟。 🔎个人主页:主页链接(欢迎各位大佬光临指导) ⭐️近…...

第三方配件也能适配苹果了,iOS 18与iPadOS 18将支持快速配对
苹果公司以其对用户体验的不懈追求和对创新技术的不断探索而闻名。随着iOS 18和iPadOS 18的发布,苹果再次证明了其在移动操作系统领域的领先地位。 最新系统版本中的一项引人注目的功能,便是对蓝牙和Wi-Fi配件的配对方式进行了重大改进,不仅…...

Docker 部署 Nginx 并在容器内配置申请免费 SSL 证书
文章目录 dockerdocker-compose.yml申请免费 SSL 证书请求头参数带下划线 docker https://hub.docker.com/_/nginx docker pull nginx:1.27注: 国内网络原因无法下载镜像,nginx 镜像文件下载链接 https://pan.baidu.com/s/1O35cPbx6AHWUJL1v5-REzA?pw…...

模型评估与选择
2.1 经验误差与过拟合 错误率(error rate): 分类错误的样本数占样本总数的比例 精度(accuracy):1- 错误率 训练误差 / 经验误差:在训练集上的误差 泛化误差:在新样本上的误差 过…...

有必要把共享服务器升级到VPS吗?
根据自己的需求来选择是否升级,虚拟专用服务器 (VPS) 是一种托管解决方案,它以低得多的成本提供专用服务器的大部分功能。使用 VPS,您的虚拟服务器将与在其上运行的其他虚拟服务器共享硬件服务器的资源。但是,与传统的共享托管&am…...

LLM代理应用实战:构建Plotly数据可视化代理
如果你尝试过像ChatGPT这样的LLM,就会知道它们几乎可以为任何语言或包生成代码。但是仅仅依靠LLM是有局限的。对于数据可视化的问题我们需要提供一下的内容 描述数据:模型本身并不知道数据集的细节,比如列名和行细节。手动提供这些信息可能很麻烦&#…...

大模型系列3--pytorch dataloader的原理
pytorch dataloader运行原理 1. 背景2. 环境搭建2.1. 安装WSL & vscode2.2. 安装conda & pytorch_gpu环境 & pytorch 2.112.3 命令行验证python环境2.4. vscode启用pytorch_cpu虚拟环境 3. 调试工具3.1. vscode 断点调试3.2. py-spy代码栈探测3.3. gdb attach3.4. …...

SQLServer 如何设置端口
在SQL Server中,可以通过以下步骤设置端口: 打开SQL Server配置管理器。可以在开始菜单中搜索“SQL Server配置管理器”来找到它。 在左侧导航窗格中,展开“SQL Server网络配置”节点。 选择你要配置的实例,如“SQL Server Netw…...

调整网络安全策略以适应不断升级的威胁形势
关键网络安全统计数据和趋势 当今数字时代网络安全的重要性...

(leetcode学习)9. 回文数
给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。 回文数 是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 例如,121 是回文,而…...

QT VTK 简单测试工程
目录 1 目录结构 2 文件源码 3 运行结果 4 报错及处理 使用编译好的VTK库进行测试 1 目录结构 2 文件源码 Pro文件 QT core guigreaterThan(QT_MAJOR_VERSION, 4): QT widgetsCONFIG c17# You can make your code fail to compile if it uses deprecated APIs. #…...

ES6 Generator函数的异步应用 (八)
ES6 Generator 函数的异步应用主要通过与 Promise 配合使用来实现。这种模式被称为 “thunk” 模式,它允许你编写看起来是同步的异步代码。 特性: 暂停执行:当 Generator 函数遇到 yield 表达式时,它会暂停执行,等待 …...

Navicat:打造高效数据库管理之道
1. 导言 1.1 介绍Navicat Navicat是一款功能强大的数据库管理工具,旨在帮助用户高效地管理多种类型的数据库,包括MySQL、PostgreSQL、Oracle、SQL Server等。通过Navicat,用户可以轻松地进行数据库的创建、编辑、备份、同步和调试等操作,极大地简化了数据库管理的复杂性。…...

Python和C++全球导航卫星系统和机器人姿态触觉感知二分图算法
🎯要点 🎯马尔可夫随机场网格推理学习 | 🎯二维伊辛模型四连网格模型推理 | 🎯统计物理学模型扰动与最大乘积二值反卷积 | 🎯受限玻尔兹曼机扰动和最大乘积采样 | 🎯视觉概率生成模型测试图像 dz…...

Unity 优化合集
1️⃣ 贴图优化 1. Read/Write Enable 这个属性勾选后允许你在运行时读取和写入纹理数据,这对于需要实时生成内容或者需要动态修改纹理的场合非常有用但在大部分情况下这是不必要的。如果打开这个属性,会使运行时贴图大小翻倍,内存中会额外…...

第九届MathorCup高校数学建模挑战赛-A题:基于数据驱动的城市轨道交通网络优化研究
目录 摘 要 一、 问题的提出 二、 基本假设 三、 符号说明 四、 问题分析 4.1 问题 1 的分析 4.2 问题 2 的分析 4.3 问题 3 的分析 4.4 问题 4 的分析 五、 问题 1 的模型建立与求解 5.1 问题分析 5.2 数据处理 5.2.1 数据统计 5.2.2 异常数据处理方法 5.2.3 剔除异常数据值 5…...

Spring webflux基础核心技术
一、 用操作符转换响应式流 1 、 映射响应式流元素 转换序列的最自然方式是将每个元素映射到一个新值。 Flux 和 Mono 给出了 map 操作符,具有 map(Function<T,R>) 签名的方法可用于逐个处理元素。 当操作符将元素的类型从 T 转变为 R 时…...

关闭Ubuntu烦人的apport
先来看让人绷不住的(恼) 我查半天apport是啥玩意发现就一错误报告弹窗,十秒钟给我弹一次一天给我内存弹爆了 就算我程序就算真的不停崩溃,也没你这傻比apport杀伤性强啊??? 原则上是不建议关闭…...

海事无人机解决方案
海事巡察 海事巡察现状 巡查效率低下,存在视野盲区,耗时长,人力成本高。 海事的职能 统一管理水上交通安全和防治船舶污染。 管理通航秩序、通航环境。负责水域的划定和监督管理,维护水 上交通秩序;核定船舶靠泊安…...

Docker--在linux安装软件
Docker 引用Docker原因是在linux中安装软件 以前在linux中安装软件,是直接安装在linux操作系统上,软件和操作系统耦合度很高,不方便管理,因为linux版本不同,环境也就改变了 docker是一种容器技术,提供标…...

知识库与RAG
认识知识库的技术原理 第一步:📖➡️📈将文档的文本转换为向量,向量存储到向量数据库。第二步:🗨️➡️🔍将用户的提问内容转换成向量,在向量数据库中检索相似的文本内容࿰…...

【2024最新】C++扫描线算法介绍+实战例题
扫描线介绍:OI-Wiki 【简单】一维扫描线(差分优化) 网上一维扫描线很少有人讲,可能认为它太简单了吧,也可能认为这应该算在差分里(事实上讲差分的文章里也几乎没有扫描线的影子)。但我认为&am…...

语言主要是一种交流工具,而不是思维工具?GPT5何去何从?
引言 在人工智能领域,特别是大语言模型(LLM)的发展中,语言和思维的关系一直是一个备受关注的话题。近期,麻省理工学院(MIT)在《Nature》杂志上发表了一篇题为《Language is primarily a tool f…...

传感器标定(三)激光雷达外参标定(lidar2ins)
一、数据采集 1、LiDAR 传感器的 LiDAR PCD 数据 2、来自 IMU 传感器的姿势文件 3、手动测量传感器之间外部参数初始值并写入的 JSON 文件 二、下载标定工具 //总的git地址: https://github.com/PJLab-ADG/SensorsCalibration git地址: https://githu…...

【漏洞复现】Crocus系统—Download 文件读取
声明:本文档或演示材料仅用于教育和教学目的。如果任何个人或组织利用本文档中的信息进行非法活动,将与本文档的作者或发布者无关。 一、漏洞描述 Crocus系统中的Download文件读取漏洞允许未经身份验证的攻击者通过特定请求读取系统上的任意文件。Crocu…...

游戏开发面试题1
说说对单例模式的了解 单例模式(Singleton Pattern)是一种设计模式,其目的是确保一个类只有一个实例,并提供一个全局访问点来访问该实例。这在某些情况下非常有用,比如需要一个唯一的配置管理器、日志记录器、或资源管…...

线程池笔记
笔记梳理 前言.PHONYC标准库头文件C/C通用或C特有头文件mkdirc_str()snprintfvsnprintfumaskopen函数可变参数列表va_startva_endfunctionalstatic_castpthread_cond_init_threads.emplace_backstd::bindstd::placeholdersThreadPool(const ThreadPool<T> &tp) dele…...

Go语言基础数据类型、变量及自增语法
本文内容为Go语言的基础数据类型、变量定义和赋值及自增语法介绍。 目录 基础数据类型 变量 先定义后赋值 定义时直接赋值 自动推导定义赋值 平行赋值 自增语法 总结 基础数据类型 int,int8 intl6, int32, int64 uint8... uint64 float32,float64 true/false 变量 …...