[Git] 两张图理解工作区、暂存区和版本库并总结git常用命令

git基础教程(29) 再次理解git最重要的三个概念--工作区、暂存区、版本库 Git 的工作区、暂存区、版本库 大家都知道,在 Git 系统中有 “三棵树” 的概念。 注意:“树” 在这里的意思是 “文件集合”,而不是指特定的数据结构。 基本概念 树 用途 HEAD(版本库) 上一次提交的快照,下一次提交的父结点 Index(暂存区) 预期的下一次提交的快照 Working Directory(工作区) 沙盒 HEAD HEAD 是当前分支引用的指针,它总是指向该分支上的最后一次提交。 这表示 HEAD 将是下一次提交的父结点。 通常,可以把 HEAD 阅读详情

前情提要

学了很多 git 命令,还有就是工作区、暂存区和版本库,这三个搞来搞去有点懵逼,自己总结了一下,做的图有些简陋,如果有不对的地方,烦请大佬们指出。

一、版本管理

1. 一张图总结

在这里插入图片描述

2. 版本管理常用命令

# 创建版本库
git init


# 版本创建
git add
git commit -m "版本说明信息"


# 查看版本记录
git log


# 版本回溯,HEAD^指向当前版本的前一版本
git reset --hard HEAD^


# 查看操作记录
git reflog


# 提交修改
git add		# 把工作区的修改放入暂存区
git add -u	# 只add已经追踪过的文件
git commit -m "修改信息"	# 把暂存区的修改做一次版本记录


# 撤销修改,撤销 add 和 commit 操作
1. 撤销工作区的修改
    git checkout -- <file>

2. 撤销已经add到暂存区,但未commit的修改
    git reset HEAD <file>
    +
    # git checkout -- <file>	# 注意,这会将工作区的修改也撤销,如果不希望撤销工作区的修改则不必使用

3. 已经commit,版本回退至前一版本
    # 1.git reset --soft 版本号 
    # 不删除工作区改动的代码,撤销commit,不撤销git add .
    git reset --soft HEAD^  //回到上一个版本

    # 2.git reset --mixed 版本号 
    # 不删除工作区改动的代码,撤销commit,撤销git add .
    git reset --mixed HEAD^  //回到上一个版本

    # 3.git reset --hard 版本号 
    # 删除工作区的代码,撤销commit,撤销git add . 回到上一次commit的状态
    git reset --hard HEAD^  # 慎用此命令,因为会将工作区的文件也一并修改掉

二、分支管理

1. 一张图总结

在这里插入图片描述

2. git 常用分支命名

Production分支(主线分支用于发版,不会直接改)
Master分支,这个分支只能从其他分支合并,不能在这个分支直接修改
 
Develop分支(开发分支)
这个分支是我们是我们的主开发分支,包含所有要发布到下一个Release的代码,这个主要合并与其他分支,比如Feature分支
 
Feature分支(新功能分支)
这个分支主要是用来开发一个新的功能,一旦开发完成,我们合并回Develop分支进入下一个Release 
 
Release分支(偏向测试)
当你需要一个发布一个新Release的时候,我们基于Develop分支创建一个Release分支,完成Release后,我们合并到Master和Develop分支
 
Hotfix分支(紧急bug发布)
当我们在Production发现新的Bug时候,我们需要创建一个Hotfix, 完成Hotfix后,我们合并回Master和Develop分支,所以Hotfix的改动会进入下一个Release

3. git branch 和 git checkout

# 查看帮助
git branch -h			# 终端中输出帮助
git branch --help		# 打开git帮助文档

# 查看remotes/origin下的分支
git branch -r
git ls-remote origin	# 会显示最新的 commit ID

# 查看所有分支,包括heads下和remotes/origin下的
git branch -a

# 切换分支
git checkout <分支名>

# 新建分支,默认以当前分支为基础
git branch <新分支名>

# 新建并切换分支
git checkout -b <新分支名>

# 删除分支,删除的是heads下的分支test
git branch -d test

# 删除remotes/origin下的分支test,并提交到远端(即删除远端的test)
git branch -rd origin/test
git push origin --delete test	# push会同时删除remotes/origin和远端的test

# 提交分支:push分支test到remotes/origin和远端的new_test
git push origin test:new_test

# 重命名分支,重命名的是heads下的分支
git branch -m old_name new_name

# 删除所有名字以 temp 开头的分支(多加两个空格是因为 git branch 输出结果带有空格)
git branch | grep -E "^  temp" | xargs git branch -d
git branch | grep -E "^  temp" | xargs git branch -D	# 强制删除

# 强制删除 master 和当前分支以外的所有分支
git branch | grep -Ev "master" | xargs git branch -D

三、拉取与提交命令

1. git merge

merge 默认会将分支与 当前分支 合并。当前分支指的是 HEAD 指向的分支,该分支的指向可以在

# 将origin/master与当前分支合并
git merge origin/master

# 将hotfix分支与当前分支合并,hotfix默认搜索heads/
git merge hotfix
git diff hotfix 	# 查看hotfix与当前分支的不同

# 出现冲突,解决过程
git status -s	# UU 表示出现冲突的文件
vim conflict.*	# 先修改出现冲突的文件
git add .		# add 告诉git冲突已经解决
git status -s	# M 表示冲突已经解决
git commit -m "conflict"	# 提交解决冲突后的新版本

2. git fetch

fetch 默认只将远端更新到remotes/origin,不会更新heads。

# 将远端更新到remotes/origin,不会更新heads
git fetch
git diff HEAD FETCH_HEAD	

# 获取远端的分支,即同步远端的dev分支到 remotes/origin/dev 和 heads/temp
git fetch origin dev:temp

3. git pull

pull 相当于 fetch和merge,会更新到 当前分支。

# 默认拉取的是与远端HEAD指向的分支,同时合并到本地HEAD指向的当前分支
git pull 

# 拉取远端dev分支到本地,并合并到当前分支
git pull origin dev = git fetch origin + git merge origin/dev

# 拉取本地不存在的远端分支
git pull origin dev:dev

4. git push

push 会同时影响 remotes/origin 和远端。远端不存在push的分支时,会创建它。

# 提交当前分支到远端,如果当前分支HEAD指向的master,就提交本地master到远端master。
git push

# 提交本地的master到远端的master,远端master不存在时会被创建。本地master不存在则会报错。
git push origin master

# 提交分支:push分支master到remotes/origin和远端的master_r
git push origin master:master_r

# push会同时删除remotes/origin和远端的test
git push origin --delete test	

5. git diff

diff 可以查看分支内容的改动。

# git diff <local branch> <remote>/<remote branch> 
# 显示本地 master 分支和 远程 master 分支文件改动的摘要
git diff --stat master origin/master  

操作记录:

# 对比工作区和版本库文件的不同
[root@i hellogit]# git diff HEAD -- code.py 
diff --git a/code.py b/code.py
index 8ebeb35..61ef177 100644
--- a/code.py	# -代表版本库
+++ b/code.py	# +代表工作区
@@ -1 +1,2 @@
 1. This is a code py
+2. This for git add and git checkout -- file	# 出现+号,说明工作区比HEAD版本多了一行


# 对比两个版本库文件的不同
[root@i hellogit]# git diff HEAD HEAD^ -- code.py 
diff --git a/code.py b/code.py
index 61ef177..8ebeb35 100644
--- a/code.py	# -代表当前版本
+++ b/code.py	# +代表后一个版本
@@ -1,2 +1 @@
 1. This is a code py
-2. This for git add and git checkout -- file	# 当前版本比后一个版本多一行

[root@i hellogit]# git diff HEAD^ HEAD -- code.py 
diff --git a/code.py b/code.py
index 8ebeb35..61ef177 100644
--- a/code.py	# -代表后一个版本
+++ b/code.py	# +代表当前版本
@@ -1 +1,2 @@
 1. This is a code py
+2. This for git add and git checkout -- file	# 当前版本比后一个版本多一行
「极简」扣子(coze)教程 | 细节决定成败!这个小功能让用户满意度飙升,讲的太细了 这一期大师兄通过向扣子(coze)应用添加提示语的方法向用户显示系统运行的状态。 阅读详情

相关推荐

Unity抖音小游戏上架实战:从零到一,详解流程与避坑指南

本文详细介绍了Unity抖音小游戏上架的全流程,包括环境准备、SDK集成、开发者账号注册、软著申请、打包提交流程及常见问题解决方案。重点解析了抖音小游戏平台特有的配置细节和避坑技巧,帮助开发者高效完成游戏上架并优化用户体验。

weixin_33704234的博客 260

git工作中常用命令

git命令: git config --global user.email “your@email.com” git config --global user.name “yourname” git clone -b 分支名 地址 测试分支:ns_ci_int_qa git pull --rebase origin ns_ci_int_qa 同步远端分支代码 线上分支:dbg_add_pro_biz 1、从线上分支拉取新的分支开发 git add git commit -m “YJ: xxx” gitk

一个刚入行的新人猿 4995

Oracle EBS订单的流程(Order->AR)

基本流程创建订单路径:Order Management > Orders,Returns > Sales Orders填写订单头信息,客户,订单类型,销售人员填写订单体信息,输入物料,数量...然后Book Order,订单Book之后,你会发现订单头的Status的状态变成了“Booked”,订单行的状态为"Awaiting Shipping",记录下来你的订单号,后边的每一步都需要这个订单号。

田攀的日志 4万+

github退回到历史版本

用命令行模式 先查看版本号git reflog或者git log --pretty=oneline 用命令行模式 恢复到某个版本号 git reset --hard <commit ID号> 推送到远程githubgit push -f -u origin master ...

CodeV的博客 2052

verilog学习——Verilog的行为建模/Behavioral modeling(2)

函数的用途是返回要在表达式中使用的值。函数定义始终以关键字function开始,后跟返回类型、名称和在参数中的端口列表。函数以关键字endfunction结束。函数至少有一个输入,如果不返回任何内容,则返回类型为void。由两种方法可以声明函数的输入;函数定义隐式地创建一个与函数同名的内部变量。通过将函数结果分配给内部变量来初始化返回值。函数调用是带有表达式的操作数。① 函数不能包含任何时间控制语句,如#、@、wait、posedge、negedge;

LXY241638的博客 1357

从零搭建UVM验证环境:新手入门实践指南

在数字芯片验证领域,SystemVerilog和UVM(Universal Verification Methodology)是构建高效验证环境的核心技术。其原理基于面向对象编程和事务级建模,通过组件化架构实现验证的复用性和自动化。这一方法学的技术价值在于显著提升验证效率与质量,广泛应用于处理器、通信芯片等复杂设计的验证场景。本文聚焦于UVM验证环境的搭建实践,通过一个加法器实例,详细解析了uvm_driver、uvm_monitor、uvm_sequence等关键组件的协同工作机制,并提供了基于Quest

weixin_30015371的博客 444

Git实现版本切换,协同开发

入门git

m0_67937429的博客 2473

C# 调用halcon中visualize_object_model_3d显示点云

3.1 判断线程是否为空,如果为空,则新创建,如果不为空,则中断线程,清空窗口后再次执行创建操作3.2 创建:调用show()方法实例化显示类的对象,传入显示参数,将线程testvisual 绑定 在 类对象的action方法上(此处action方法内部,只调用了visualize_object_model_3d算子)3.3 启动线程。

weixin_42362219的博客 1402

如何在 GitHub 上下载并切换到仓库的历史版本

以上步骤说明了如何在 GitHub 上有效地从仓库克隆并切换到历史版本。每个步骤都是为了确保代码的可访问性和可管理性,支持开发过程中的版本控制需求。直接克隆特定历史版本的方法非常适合于只关注特定快照的场景,特别是在带宽或存储空间有限的环境中。通过这种方式,开发团队能够高效地回溯到任何先前发布的版本,进行错误修复或功能扩展,这对于维护和软件开发的可持续性至关重要。

m0_73640344的博客 3414

Isaac Sim 使用经验(配置要求,云服务器)

Google Colab及AutoDL都是在docker内运行,其中google colab并不支持docker指令,而依照AutoDL的相关文档,AutoDL并不直接提供docker指令。2. Google Colab/AutoDL 不支持图形化界面,图形渲染等任务,所以没有办法使用Omniverse Streaming进行直播,从而更好的对结果进行展示。对于第一点,或许存在直接手动复现镜像的可能,但是考虑到Isaac Sim/Isaac Lab由于比较新,可能不够稳定,因此还是按照官方文档进行部署。

weixin_44211433的博客 4586

【雕爷学编程】Arduino动手做(45)---红外光电避障传感器模块4

雕爷学编程,Arduino动手做,开源硬件,创客传感器,红外光电避障传感器模块

雕爷学编程 2503

git回退到某个提交

(慎重用,用前最好备份一下代码,或者用git diff 生成一个patch)退到/进到 指定的commit(使用git log查看历史提交信息)//只删除commitID之后的提交记录log,代码的改动还在。//彻底删除commitID之后所做的改动,代码也一起回退回来了。回退到前3次提交之前。

棠樾的博客 6079

基于深度学习的AI生成式人脸图像鉴别

AIGC(AI内容生成)技术的快速发展确实为创作者提供了高效生产力工具,但同时也引发了一些问题和挑战。这些技术可以生成以假乱真的图像、视频换脸等,给不法分子提供了滥用的机会。其中,一些不法分子可能利用AIGC技术制造虚假新闻、违反版权、绕过活体身份验证、散布谣言和诽谤他人、进行敲诈勒索等非法活动,以谋取不当利益。这些行为给社会造成了严重的负面影响,破坏了信息的真实性和可信度。因此,我们需要认识到AIGC技术的潜在风险,并采取相应的措施来应对。

mingo_敏 4494

Git | Git 版本控制 —— 工作区 & 暂存区 & 版本库

在上一章中,我们提到了 “本地版本仓库” 的概念,又讲解了 和 命令,为了让小伙伴更加清楚的理解到这两个命令所做的事,所以本章,笔者将向你介绍一下 Git 文件管理的逻辑结构。本地 Git 仓库主要由两个大部分构成(后续会引入 GitHub,就又复杂一点了):工作区:你当前正在工作的地方版本库:你保存历史修改的地方首先是 “工作区”,记得我们上一章我们 commit 后查看 Git 仓库状态时的回显吗:它跟我们说 “working tree clean”,这里的 working tree 指代的就是工作

Blue17 の 小窝 2074

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

【Git】工作区、暂存区与版本库

本篇博文旨在介绍git的工作区,暂存区和版本库的概念;并说明使用git add、git commit 等指令时,对工作区,暂存区以及版本库分别造成的结果; 对于会使用git的人,git add,git commit,git checkout ,git reset这些指令应该很熟悉了 我们一般使用git,修改好文件后,会用git add 文件名,git commit -m 备注这两条指令,...

皓皓松的博客 5718

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Git之——Git工作区、版本库和暂存区

Git暂存区(stage)是比较难理解的部分,也是Git的特色之一,那么它和工作区与版本库之间的联系又是怎样的,在这之前,应该先记住如下点: 1、所说的版本库就是隐藏的.git目录。 2、文件 .git/index是记录了文件名、文件的状态信息(时间戳、文件长度等)等的文件索引的目录树。 3、Git 对象库(.git/objects)中保存的是文件索引中所指定的文件实体。 下面

younghz 8407

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

理解 Git 的三个工作区:工作区、暂存区和版本库

认识Git工作区:工作区、暂存区和版本库

虾米Life 1386

Git 工作区、暂存区和版本库

摘要:Git的三个核心区域是工作区、暂存区和版本库。工作区是编辑文件的地方,暂存区是选择下次提交内容的中间层,版本库存储所有提交历史。通过git add将工作区改动放入暂存区,git commit将暂存区内容存入版本库。理解这三者的关系是掌握Git工作流程的基础,有助于后续学习更高级的操作。关键命令包括git add、git commit、git reset等,分别影响不同区域间的文件流转。

likuolei的博客 811

【开发工具】认识Git | 认识工作区、暂存区、版本库

所谓的版本控制器,就是能让你了解到一个文件的历史,以及它的发展过程的系统。• 在创建 Git 版本库时,Git 会为我们自动创建一个唯一的 master 分支,以及指向 master 的一个指针叫 HEAD。• 当对工作区修改(或新增)的文件执行 git add 命令时,暂存区目录树的文件索引会被更新。• --soft 参数对于工作区和暂存区的内容都不变,只是将版本库回退到某个指定版本。rm命令只会删除工作区的文件,对于暂存区和版本库中的内容没有影响。的内容退回为指定的版本内容,但工作区文件保持不变。

宁清的博客 1326

Git工作区、暂存区与版本库详解

本文详细讲解了Git的三大核心概念:工作区、暂存区和版本库。工作区是实际编辑文件的地方,暂存区临时保存准备提交的更改,版本库永久存储历史记录。通过创建和修改文件的完整流程示例,展示了文件如何在三个区域间流转。文章还提供了区域关系图、常用命令对照表和记忆口诀,帮助读者理解Git的运作机制。掌握这三个概念的区别与联系,是熟练使用Git的基础。

主要分享关于C++学习中遇到的问题,请多多指教~ 738

git diff:比较工作区、暂存区、本地仓库之间的差异

本文转自https://blog.youkuaiyun.com/weixin_34275734/article/details/94566120 1、git的工作区:在当前仓库中,新增,更改,删除文件这些动作,都发生在工作区里面。 2、git的暂存区:英文叫stage, 或index。在版本库.git目录下,有一个index文件。它实际上就是一个包含文件索引的目录树,像是一个虚拟的工作区。在这个虚拟工...

Tony的博客 6173

git 理解 节点、工作区、暂存区、版本库

git树结构: git树结构每个节点都是一个commit的快照,它包含了三个重要概念:节点,HEAD指针,Branch指针 1.节点:git使用commit之后就会生成一个节点,之前的节点成为这个节点的父节点 2.HEAD指针:HEAD指针可以通过 checkout方法查看任一节点 3.Branch指针:一般commit都在HEAD指针指向Branch指针的时候提交(当HEAD指针只指向节点,而不...

Claroja 2314

Git本地仓库、版本库、工作区、暂存区、分支、远程仓库分别是什么?

1.我们要将文件提交到远程仓库时候,首先需要在本地随便找一个路径,我是进入到G:/test目录下,使用pwd可以查看当前路径: 2.然后将该路径作为我的本地仓库,我们可以先对它进行初始化: $ git init 我们可以看到,初始化之后,会在该目录后面多一个单词master: 此时该路径下也会多一个隐藏文件 .git : 3.然后我们可以随便创建一个文件测试一下提交: //创建文件 $ t.........

doublewe的博客 7806

Git工作区、版本库和暂存区的理解

工作区与版本库的理解。 工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。 Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。

清颖的博客 743

【原创】Git删除暂存区或版本库中的文件

Git删除暂存区或版本库中的文件

m0_50843980的博客 6538

一文搞懂 Git 核心:工作区、暂存区与版本库的实战指南

工作区:写代码、改文件的地方;暂存区:用git add整理要提交的修改;版本库:用git commit保存最终版本,用git reset回退历史。新增 / 修改:git add → git commit -m "描述"查看状态:git status查看差异:git diff回退版本:git reset(选对参数)撤销修改:git checkout -- file(工作区)、git reset HEAD file(暂存区)

2402_84411549的博客 1327
上一篇: [Python] 实现单例模式的四种方式及单例模式日志
下一篇: [Git] 还原某个特定的文件到之前的某个版本
Spade_
博客等级 码龄10年 918粉丝 123原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值