【git】工作场景下的 工作区 <-> 暂存区<-> 本地仓库 命令实战 具体案例
🚀 Git 工作区 → 暂存区 → 本地仓库 → 回退实战
Git 的核心流程是:
👉 工作区(Working Directory) → git add → 暂存区(Staging Area) → git commit → 本地仓库(Local Repository)
如果想回退,可以从本地仓库 → 暂存区 → 工作区

📌 1. 创建一个 Git 仓库
mkdir my_project && cd my_project
git init # 初始化 Git 仓库
git init会创建一个.git目录,用于管理 Git 版本控制信息。
📌 2. 创建一个文件(工作区)
echo "Hello Git!" > hello.txt
此时,hello.txt 在工作区,但 Git 还不知道它的存在。
查看状态:
git status
输出:
Untracked files:(use "git add <file>..." to include in what will be committed)hello.txt
Git 发现
hello.txt,但它还没有被跟踪。
📌 3. 添加到暂存区
git add hello.txt
再次查看状态:
git status
输出:
Changes to be committed:(use "git rm --cached <file>..." to unstage)new file: hello.txt
hello.txt进入了暂存区,但还没有提交到本地仓库。
📌 4. 提交到本地仓库
git commit -m "初次提交"
输出:
[main (root-commit) 1a2b3c4] 初次提交1 file changed, 1 insertion(+)create mode 100644 hello.txt
hello.txt现在存储到了本地仓库,Git 记录了它的快照。
📌 5. 修改文件并回退
(1) 修改 hello.txt
echo "Git is awesome!" >> hello.txt
查看状态:
git status
输出:
Changes not staged for commit:(use "git add <file>..." to update what will be committed)(use "git restore <file>..." to discard changes in working directory)modified: hello.txt
hello.txt在工作区被修改了。
(2) 回退修改
如果不想要这次修改:
git restore hello.txt
再次 git status:
nothing to commit, working tree clean
hello.txt回到了本地仓库的版本。
(3) 误 add 了,如何回退?
git add hello.txt # 错误地加入暂存区
git restore --staged hello.txt # 从暂存区撤回到工作区
这样
hello.txt又变回未add之前的状态。
即:
在没有commit之前,想要回退修改都是用git restore
- 撤销修改:
git restore <file>- 撤销
add:git restore --staged <file>
(4) 误 commit 了,如何回退?
如果误提交到本地仓库:
git reset --soft HEAD~1 # 退回到暂存区 也可以用git log显示出所有提交记录,
# 复制想要回到的commit id 使用git reset --soft <commit id> 这里HEAD~1表示回退到上一个commit状态
git reset HEAD # 退回到工作区
这样就撤回了
commit,但代码不会丢失。
即
commit之后的回退,都是用git reset

📌 6. 总结:Git 各区域操作
| 操作 | 命令 |
|---|---|
| 工作区 → 暂存区 | git add <file> |
| 暂存区 → 本地仓库 | git commit -m "提交信息" |
| 本地仓库 → 暂存区(撤回提交) | git reset --soft HEAD~1 |
暂存区 → 工作区(撤回 add) | git restore --staged <file> |
| 工作区回退(撤销修改) | git restore <file> |
Git实战:
案例:开发一个简单的登录功能
假设你正在开发一个网站的登录功能,你需要修改以下文件:
index.html: 添加登录表单style.css: 添加登录表单的样式script.js: 添加登录表单的验证逻辑
一、准备工作
- 克隆远程仓库:假设你已经克隆了公司项目的代码仓库到本地。
- 创建开发分支:从主分支 (
main) 创建一个新的分支feature/login,并切换到该分支。
git checkout -b feature/login
二、开发登录功能
- 修改代码:在
index.html、style.css和script.js文件中进行代码编写和修改。 - 查看工作区状态:使用
git status命令查看工作区中哪些文件被修改了。
git status
- 你会看到类似以下的输出:
On branch feature/login
Changes not staged for commit:(use "git add <file>..." to update what will be committed)(use "git restore <file>..." to discard changes in working directory)modified: index.htmlmodified: style.cssmodified: script.jsno changes added to commit (use "git add" and/or "git commit -a")
- 这表示
index.html、style.css和script.js文件被修改了,但还没有添加到暂存区。
三、将修改添加到暂存区
- 添加文件到暂存区:使用
git add命令将修改后的文件添加到暂存区。
git add index.html style.css script.js
- 也可以使用
git add .添加所有修改过的文件。
- 再次查看工作区状态:使用
git status命令查看工作区状态。
git status
- 你会看到类似以下的输出:
On branch feature/login
Changes to be committed:(use "git restore --staged <file>..." to unstage)modified: index.htmlmodified: style.cssmodified: script.js
- 这表示
index.html、style.css和script.js文件已经被添加到暂存区,准备提交到本地仓库。
四、将修改提交到本地仓库
- 提交代码:使用
git commit命令将暂存区的文件提交到本地仓库。
git commit -m "完成登录功能开发"
- 提交信息应该简洁明了,描述这次提交的内容。
- 查看提交历史:使用
git log命令查看提交历史。
git log
- 你会看到类似以下的输出:
commit 1234567890abcdef1234567890abcdef12345678 (HEAD -> feature/login)
Author: yourname <yourname@example.com>
Date: Mon Oct 30 12:00:00 2023 +0800完成登录功能开发
- 这表示你已经成功将修改提交到了本地仓库。
五、回退到之前的版本
假设你在开发过程中发现代码出现了问题,想要回退到之前的版本。
- 查看提交历史:使用
git log命令查看提交历史,找到你想要回退到的版本的 commit id。
git log
- 你会看到类似以下的输出:
commit 1234567890abcdef1234567890abcdef12345678 (HEAD -> feature/login)
Author: yourname <yourname@example.com>
Date: Mon Oct 30 12:00:00 2023 +0800完成登录功能开发commit 0987654321fedcba0987654321fedcba09876543
Author: yourname <yourname@example.com>
Date: Mon Oct 30 11:00:00 2023 +0800初始化项目
- 假设你想要回退到 “初始化项目” 的版本,commit id 是
0987654321fedcba0987654321fedcba09876543。
- 回退到指定版本:使用
git reset命令回退到指定版本。
git reset --hard 0987654321fedcba0987654321fedcba09876543
- 这会将工作区、暂存区和本地仓库都回退到指定版本。
- 查看工作区状态:使用
git status命令查看工作区状态。
git status
- 你会看到类似以下的输出:
On branch feature/login
nothing to commit, working tree clean
- 这表示你已经成功回退到了指定版本。
https://github.com/0voice
相关文章:
【git】工作场景下的 工作区 <-> 暂存区<-> 本地仓库 命令实战 具体案例
🚀 Git 工作区 → 暂存区 → 本地仓库 → 回退实战 Git 的核心流程是: 👉 工作区(Working Directory) → git add → 暂存区(Staging Area) → git commit → 本地仓库(Local Repos…...
Python 中从零开始的随机梯度下降
文章目录 一、说明二、了解基础知识的重要性:2.1 什么是梯度下降?2.2 梯度下降的类型: 三、随机梯度下降 (SGD) 有何不同3.1 随机性的概念:3.2 SGD的优点和缺点: 四、随机梯度下降的分步说明五、…...
期权隐含波动率是什么意思?
财顺小编本文主要介绍期权隐含波动率是什么意思?期权隐含波动率(Implied Volatility)是根据当前期权市场价格,利用期权定价模型(如Black-Scholes模型)推导出的关于合约标的理论上的价格波动率。它反映了市场…...
python中使用数据库sqlite3
Python使用sqlite3数据库 python3.x标准库内置了SQLite3 查看sqlite的版本 import sqlite3 sqlite_version sqlite3.sqlite_version print(f"SQLite version: {sqlite_version}") 显示 导入模块连接sqlitte3 import sqlite3 consqlite3.connect("d:/fi…...
JavaScript数组-数组的概念
在JavaScript编程中,数组(Array)是一种非常重要的数据结构,它允许我们将多个值存储在一个单独的变量中。数组可以包含任意类型的元素,如数字、字符串、对象甚至是其他数组,并提供了丰富的内置方法来操作这些…...
英语---基础词汇库
〇、动词类(常见谓语表述) 1.show,indicate,find 认为,表明 2.improve,promote,boost,enhance,increase,advocate,strength 改善,提升,促进,增强࿰…...
ASCII 与 Unicode:两种字符编码的定义和不同
博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: Java 文章目录 💯前言💯一、ASCII编码详解1.1 ASCII的组成1.2 ASCII的局限性 💯二、Unicode编码详解2.1 Unicode编码方式2.2 Unicode的字符范围 💯三、ASCII与Unicode的…...
Linux相关概念和易错知识点(28)(线程控制、Linux下线程的底层)
目录 1.线程控制 (1)pthread和thread库 (2)线程的创建、等待和分离 ①线程创建 ②线程等待 ③线程分离 ④线程替换(不可行) (3)线程的终止和取消 ①线程终止 ②线程取消 2…...
lighten() 函数被弃用:替代方案color.scale()或者color.adjust()
在 SCSS (Sass 的一个语法) 中,lighten() 函数用于调整颜色的亮度。然而,随着 Sass 语言的不断发展,一些旧函数被标记为弃用,以鼓励使用更现代、更灵活的 API。lighten() 函数就是其中之一。 1. 弃用通知 当您看到 lighten() is…...
【leetcode】双指针:有效三角形的个数 and 和为s的两个数
文章目录 1. 有效三角形的个数1.题目2.讲解算法原理3.代码 2.和为s的两个数1.题目2.思路3.代码 1. 有效三角形的个数 1.题目 示例1解析: 2.讲解算法原理 3.代码 class Solution { public:int triangleNumber(vector<int>& nums) {sort(nums.begin(), …...
IDEA通过Contince接入Deepseek
Deepseek 的出色表现,上期【Deepseek得两种访问方式与本地部署】 安装Continue插件 第一步、下载插件 在编辑栏【File】->设置【Settiings】或快捷键【CtrlAltS】,弹窗的左侧导航树,选择【plugins】,在marketplace 搜索【Continue】,点…...
grep如何排除多个目录?
在使用 grep 进行文本搜索时,有时候需要排除多个目录,避免在这些目录下进行搜索。下面介绍几种不同的实现方式。 目录 1.使用 -r 和 --exclude-dir 选项(GNU grep) 2.使用扩展正则表达式和 -P 选项(GNU grep&#x…...
Elasticsearch 数据建模:从原理到实战的降维打击指南
Elasticsearch 数据建模:从原理到实战的降维打击指南 🚀 第一章 数据建模的物理法则:倒排索引的奇妙世界 1.1 倒排索引:比字典更聪明的数据结构 当你在ES中存入"Hello World"时,背后发生了这些魔法&#…...
python defaultdict用法
摘要 使用 defaultdict 可以简化处理字典中缺失键的情况。以下是几个使用 defaultdict 的示例,展示了它在不同场景下的应用。 示例 1:分组文件 假设我们有一组文件名,想要根据文件扩展名将它们分组。我们可以使用 defaultdict 来实现这一点…...
Java 与设计模式(15):模板方法模式
一、定义 模板方法模式是一种行为设计模式,它定义了一个操作中的算法的骨架(也就是大致的步骤和流程),而将一些具体步骤的实现延迟到子类中。这样,子类可以不改变算法的结构即可重新定义算法的某些特定步骤。 二、Ja…...
ubuntu更新失败:apt-get install -f Transaction failed: 软件包系统已损坏
检查您是否使用了第三方源。如果是就禁用它们,它们常常导致问题。 然后在终端中运行以下命令:apt-get install -f Transaction failed: 软件包系统已损坏下列软件包未满足的依赖关系:sunloginclient: Depends: libappindicator3-1 但是 %%s 没…...
16-使用QtChart创建动态图表:入门指南
QtChart是Qt框架中的一个强大模块,用于创建各种类型的图表,如折线图、柱状图、饼图等。它提供了丰富的API和灵活的配置选项,使得开发者能够轻松地将数据可视化集成到应用程序中。本文将介绍如何使用QtChart创建一个简单的动态折线图ÿ…...
C++ | 虚函数
在 C 面向对象编程领域,多态性堪称核心概念,而虚函数则是实现运行时多态的关键所在。 一、虚函数的概念与作用 1.1 什么是虚函数 虚函数是 C 中用于实现动态多态的成员函数。在基类中使用virtual关键字声明虚函数后,派生类能够重写&#x…...
单元测试整理
在国外软件开发中,单元测试必不可少,但是国内并不太重视这一块,一个好的单元测试可以提前发现很多问题,也减去和测试battle的时间 Spring单元测试 JUnit4 RunWith 指明单元测试框架 e.g. RunWith(SpringJUnit4ClassRunner.cla…...
Delphi语言的软件工程
Delphi语言的软件工程 引言 在软件工程的历史长河中,Delphi语言作为一种快速应用程序开发(RAD)的工具,凭借其高效的开发环境和强大的编程能力,一直在软件开发领域占有一席之地。本文将探讨Delphi语言的历史背景、特性…...
终极指南:Twitter4J与Gradle/Maven集成的完整依赖管理解决方案
终极指南:Twitter4J与Gradle/Maven集成的完整依赖管理解决方案 【免费下载链接】Twitter4J Twitter4J is an open-source Java library for the Twitter API. 项目地址: https://gitcode.com/gh_mirrors/tw/Twitter4J Twitter4J是一款强大的开源Java库&#…...
Godot SpriteMesh插件:2D像素精灵转3D网格的完整指南
1. 项目概述:当2D像素精灵遇见3D世界如果你是一个使用Godot引擎的独立开发者,尤其是热衷于制作像素风或2D风格3D游戏的创作者,那么你很可能遇到过这样一个痛点:如何将那些精美的2D像素精灵(Sprite)自然地融…...
别再手动种树了!3DMAX+Forest Pack Pro预设库保姆级安装指南,5分钟搞定你的森林场景
别再手动种树了!3DMAXForest Pack Pro预设库保姆级安装指南,5分钟搞定你的森林场景 当你在3DMAX中手动摆放第50棵树时,是否已经开始怀疑人生?别担心,Forest Pack Pro的预设库就是来拯救你的。想象一下,只需…...
当node.js遇见ai:使用快马平台快速构建智能对话机器人后端
当Node.js遇见AI:使用快马平台快速构建智能对话机器人后端 最近在尝试用Node.js开发一个智能对话机器人后端,发现结合AI能力可以解锁很多新场景。比如客服系统、智能助手、内容生成工具等。作为一个全栈开发者,我一直在寻找能简化AI集成流程…...
暗黑2存档编辑器完全指南:5分钟掌握角色定制与装备管理
暗黑2存档编辑器完全指南:5分钟掌握角色定制与装备管理 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor 还在为刷不到心仪的暗金装备而烦恼吗?想尝试各种强力build却不想重新练级?d2s-editor这…...
别再只调sklearn了!用Statsmodels给你的线性回归模型做个‘体检报告’(附Python代码)
别再只调sklearn了!用Statsmodels给你的线性回归模型做个‘体检报告’(附Python代码) 当你用sklearn的LinearRegression().fit()快速得到一个预测模型后,是否曾好奇过:这个模型真的可靠吗?就像体检报告能揭…...
终极Win11优化指南:用Win11Debloat轻松打造纯净高效系统
终极Win11优化指南:用Win11Debloat轻松打造纯净高效系统 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter and …...
手把手教你用ModelSim/QuestaSim仿真一个完整的FPGA数据链:从ADC采样、FIFO缓存到UART发送
FPGA数据链仿真实战:从ADC采样到UART发送的ModelSim验证指南 在FPGA开发中,构建一个可靠的数据采集与传输系统是许多项目的核心需求。想象一下这样的场景:您已经完成了ADC采样模块、FIFO缓存控制器和UART发送模块的独立验证,但当这…...
RocketMQ Streams 1.1.0: 轻量级流处理再出发
本文作者:倪泽,Apache RocketMQ committer、RSQLDB/RocketMQ Streams Maintainer 01 背景 RocketMQ Streams是一款基于RocketMQ为基础的轻量级流计算引擎,具有资源消耗少、部署简单、功能全面的特点,目前已经在社区开源。Rocket…...
别再死记硬背‘枚举’和‘哈希’了!通过‘奶牛拼图’这道趣题,真正理解它们的应用场景与配合
从奶牛拼图到算法思维:枚举与哈希的趣味实践 想象一下,一群奶牛围坐在谷仓里,不是在咀嚼干草,而是在玩单词拼图游戏。它们对"MOO"这个词情有独钟,甚至发明了一套加密系统来保护自己的拼图不被农夫约翰轻易破…...
