Git核心概念图例与最常用内容操作(reset、diff、restore、stash、reflog、cherry-pick)

文章目录

  • 简介
  • 前置概念
    • .git目录
    • objects目录
    • refs目录
    • HEAD文件
  • reset
  • reflog 与 reset --hard
  • revert(撤销指定提交)
  • stash
  • diff
    • 工作区与暂存区差异
    • 暂存区与HEAD差异
    • 工作区与HEAD差异
    • 其他比较
  • restore、checkout(代码撤回)
  • merge、rebase、cherry-pick

简介

本文将介绍Git几个核心概念,和最常用的几个内容操作命令:

  1. reset
  2. diff
  3. restore、checkout
  4. stash
  5. reflog
  6. revert
  7. cherry-pick(merge、rebase)

前置概念

首先我们来看一下几个非常重要的前置概念

.git目录

git目录说明

git init

我们执行上面命令就会生成一个.git目录

git 工作区、暂存区、本地仓库

【工作区】add就到【暂存区】commit就到【本地仓库】

objects目录

git objects目录
objects目录中保存的是add到暂存区和commit到本地仓库的文件

refs目录

git refs目录

HEAD文件

HEAD是一个文本文件,你们内容是HEAD当前指向的分支:

ref: refs/heads/feature-view

reset

我们首先来看一下我们最常用的reset操作。

git reset操作示意图

reset是重置,他重置的是commit

git reset [–soft | --mixed | --hard] HEAD

  1. –mixed:默认参数,撤销commit,所有commit和没有commit的代码放到工作区
  2. –soft:撤销commit,所有commit和没有commit的代码放到暂存区
  3. –hard:撤销commit,丢弃所有commit、工作区、暂存区代码
# head表示当前版本,head^等价于head~1表示回退所有内容到上一个版本
git reset head^

# 回退2个版本
git reset head~2


# 将tree.txt这个文件的版本到上一个版本
git reset head^ tree.txt

# 回退到指定commit,commit-id:4889036387
git reset 4889036387

我们最最常用的reset的2个操作:

  1. 感觉自己的commit有点问题,想重新commit,这个也可以用git commit --amend
  2. 自己push之前有提交,导致push失败,pull之前要reset,这里可以用–soft参数,这样如果没有冲突就不用再add了

reset多个版本的这种操作不建议做,除非没有push到远程仓库,或者只有你一个人在提交代码。

如果修改了远程仓库的commit,通常push是不行的,必须使用git push -f。

git push -f是一个非常危险的操作,会导致push之前,其他人push的新代码丢失

git提示可以使用,是让我们知道自己在干什么,而不是告诉我们git push不行,用git push -f 吧。

一般来说,规范的团队都会把git push -f给禁用掉,不然一个人骚操作,代码丢了,可能啥证据都没有。

reflog 与 reset --hard

如果不小心执行了reset --hard,有机会补救吗?

git reset --hard head~2

答案是还能抢救一下:

首先:

git reflog

git reflog

再使用git reset --hard回退到reset的上一个版本

git reset --hard 8ca4549

commit的内容回来了,但是工作区和暂存区的内容掉了,找不回了

revert(撤销指定提交)

revert是用来将某次的commit的内容,提取出来到工作区。

这样就可以重新编辑,然后再一次提交。

主要使用场景就是:发现自己某一次提交有点问题,但是在这次提交之前已经有其他人提交了,怎么办呢?

可以用revert

# 查看提交记录
git log --oneline
# 撤销指定的提交
git log revert b1c305d

git revert

revert并不会修改指定的commit,只会根据指定commit做逆操作

可以checkout到指定commit,看到内容并没有少:

git checkout -b feature-view b1c305d

revert相当于将指定的commit合并到当前的head,还可能冲突。

所以,通常来说还不说直接改。唯一的作用可能就是记不清楚的commit的内容的时候,可以revert能自动帮你做。

stash

stash最常用的场景2个:

  1. 我们切分支的时候,有时候有修改不能切,就可以stash暂存
  2. pull代码冲突,就可以先stash 再pull
# 默认暂存
git stash

# 添加暂存提示信息
git stash save "暂存提示信息"

# 查看暂存了哪些内容
git stash list

# 查看最上面的暂存修改了哪些文件
git stash show
# 查看第2个暂存修改了哪些文件
git stash show stash@{1}


# 查看最上面的暂存修改的具体内容
git stash show -p 
# 查看第2个暂存修改的具体内容
git stash show  stash@{1}  -p

# 应用最上面的暂存,不删除
git stash apply
# 应用第2个暂存
git stash apply stash@{1} 

# 应用最上面暂存,并删除(没有冲突才删除)
git stash pop 
# 应用第2个暂存,并删除(没有冲突才删除)
git stash pop stash@{1}

# 删除最上面暂存
git stash drop
# 删除第2个暂存
git stash drop stash@{1}

# 删除所有暂存
git stash clear

diff

工作区与暂存区差异

git diff输出信息说明

git diff
git diff b.txt

# 暂存区的文件在objects中,可以通过下面的命令查看
git cat-file -p 8fec8c3
# 工作区的对象还没有在objects中,会提示找不到对象
git cat-file -p 04a9f41

# 可以通过HEAD查看已经commit的对象
git cat-file -p HEAD:b.txt
git cat-file -p d1d06ad

暂存区与HEAD差异

暂存区(stage)HEAD是当前分支最新的commit

git diff --cached
git diff --cached b.txt

工作区与HEAD差异

HEAD是当前分支最新的commit(通常就是master),也可以使用指定的commit-id

git diff HEAD
git diff HEAD b.txt

# 工作区与指定commit的差异
git diff commit-id

其他比较

# 查看两个commit之间的差异
git diff commit-id1 commit-id2

# 查看不同分支的文件差异
git diff branch-name1:file-path branch-name2:file-path

restore、checkout(代码撤回)

推荐使用restore,checkout还是让他去切分支吧。

restore是有递进关系:

  1. 可以从暂存区撤回到工作区使用–staged参数(相当于add的逆操作)
  2. 可以直接丢弃工作区的修改
# 丢弃工作区的修改
git restore a.txt
# 等价于
git checkout a.txt
# 丢弃工作区和暂存区所有修改,不能指定文件,指定文件就等价于git checkout filename.txt
git checkout -f

# 将暂存区回退到工作区
git restore --staged a.txt

merge、rebase、cherry-pick

merge、rebase、cherry-pick主要是操作commit:

  1. merge合并代码,注意合并解决冲突就可以
  2. rebase,优化commit,注意修改的开始commit之后没有其他人的提交就可以(如果提示需要git push -f时一定要注意)
  3. cherry-pick是从其他分支挑选commit到当前分支

这里我们重点说一下cherry-pick,比如一个任务我已经开发了一段时间了,但是临时需要发一个修复版本,但是修复版本使用了我开发这段时间的代码,这么办呢?

这个时候就可以使用cherry-pick。

git cherry-pick说明
如果有冲突,先解决冲突:
git 解决冲突
继续cherry-pick:
git cherry-pick continue

# 首先切到指定分支
git checkout b1
# 查看需要pick哪些提交
git log --oneline

# 切回到pick分支
git checkout master

# cherry-pick指定的commit
git cherry-pick 1f54b01 0fed6dd

# 如果有冲突手动解决冲突,然后add
git add .

# 继续cherry-pick处理commit信息
git cherry-pick --continue

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

赛氪提供专业技术支持,首届“天翼云息壤杯”高校AI大赛正式开启

2024年9月25日,在ICT中国2024高层论坛暨国际信息通信展主论坛上,首届“天翼云息壤杯”高校AI大赛正式拉开帷幕。中国电信总经理梁宝俊出席并发表了致辞。此次大赛由国务院国资委、工业和信息化部、教育部等部委指导,中国电信集团有限公司和华…

【排序】快排思想以及例子

思想 使用分治法来处理数据 例题 19 97 09 17 01 08 首先确定一个pivot 一般是首位&#xff0c;把比p小的放p的左边&#xff0c;比p大的放p的右边。L是左指 R是右指 首轮排序 p 19 __ 97 09 17 01 08 L R 首先应从R开始判断 08<19 08替换到p所在位置&#xff0c;R移动 p 19…

【AIGC】AI时代降临,AI文案写作、AI绘画、AI数据处理

目录 1、ChatGPTAI文案与写作108招2、AI短视频生成与剪辑实战108招3、AI绘画与摄影实战108招4、AI商业广告设计实战108招5、AI数据处理实战108招6、AI智能办公实战108招 传送门&#xff1a;清华大学出版社AI实战108招 全6册 1、ChatGPTAI文案与写作108招 《ChatGPTAI文案与写…

DDD重构-实体与限界上下文重构

DDD重构-实体与限界上下文重构 概述 DDD 方法需要不同类型的类元素&#xff0c;例如实体或值对象&#xff0c;并且几乎所有这些类元素都可以看作是常规的 Java 类。它们的总体结构是 Name: 类的唯一名称 Properties&#xff1a;属性 Methods: 控制变量的变化和添加行为 一…

MySQL 基础查询

1、DISTINCT select DISTINCT EMPLOYEE_ID ,FIRST_NAME from employees 按照ID去重&#xff0c;DISTINCT的字段要放在前面&#xff0c;不会再继续在FIRST_NAME上去重判断&#xff1b; 如果需要多字段去重&#xff0c;需要用到group by&#xff0c;这个后面讲&#xff1b; …

Redis-04 Redis管道

Redis 管道&#xff08;Pipelining&#xff09;是一种技术&#xff0c;它允许客户端一次发送多个命令给服务器&#xff0c;而无需等待每个命令的响应。这样可以减少网络延迟和提高命令的执行效率。 创建txt文件&#xff0c;里面写需要执行的操作&#xff0c;然后使用cat命令一次…

【C++打怪之路Lv11】-- stack、queue和优先级队列

&#x1f308; 个人主页&#xff1a;白子寰 &#x1f525; 分类专栏&#xff1a;重生之我在学Linux&#xff0c;C打怪之路&#xff0c;python从入门到精通&#xff0c;数据结构&#xff0c;C语言&#xff0c;C语言题集&#x1f448; 希望得到您的订阅和支持~ &#x1f4a1; 坚持…

基于SSM+微信小程序的家庭记账本管理系统(家庭1)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 1、管理员端功能有首页、个人中心、用户管理&#xff0c;消费详情管理、收入详情管理、系统管理等。 2、用户端功能有首页、消费详情、收入详情、论坛信息、我的等功能。 2、项目技术 …

C语言教程——数组(1)

目录 系列文章目录 前言 1、一维数组的创建和初始化 1.1数组的创建 1.2数组的初始化 1.3一维数组的使用 总结 1.4一维数组在内存中的存储 2、二维数组的创建和初始化 2.1二维数组的创建 2.2二维数组的初始化 2.3二维数组的使用 2.4二维数组在内存中的存储 3、数组…

时空智友企业流程化管控系统uploadStudioFile接口存在任意文件上传漏洞

免责声明&#xff1a;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;所产生的一切不良后果与文章作者无关。该文章仅供学习用途使用。 1. 时空智友…

【Vulnhub靶场】Kioptrix Level 3

目标 本机IP&#xff1a;192.168.118.128 目标IP&#xff1a;192.168.118.0/24 信息收集 常规 nmap 扫存活主机&#xff0c;扫端口 根据靶机IP容易得出靶机IP为 192.168.118.133 nmap -sP 192.168.118.0/24nmap -p- 192.168.118.133 Getshell 开放22端口和80 端口 访问web…

C++进阶之路:日期类的实现、const成员(类与对象_中篇)

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

如何选择合适的云服务商,看IDC怎么说

01 | 2份IDC报告&#xff0c;评估了Covid后的云增长与云服务市场的变化 《IDC MarketScape&#xff1a;全球公有云基础设施即服务提供商评估》&#xff08;2022&#xff09;共评估了 13 家云提供商&#xff0c;其中既有超大规模云服务商&#xff0c;如亚马逊云科技&#xff1b…

论文阅读-三维结构几何修复(导-4)

摘要 解决了3D数字模型中大洞修复的问题。 通过基于字典学习的方法解决了缺失区域推断问题&#xff0c;该方法利用从单个自相似结构和在线深度数据库中得出的几何先验。利用几何先验提供的线索&#xff0c;从洞的边界周围自适应地传播局部3D表面平滑性来恢复底层表面。在合成…

word中的内容旋转90度

在vsto、Aspose.Words 中&#xff0c;默认没有直接的 API 可以让表格整体旋转 90 度。然而&#xff0c;我们可以通过一些方式来实现类似的效果&#xff0c;具体思路如下&#xff1a; 将表格插入到一个形状&#xff08;Shape&#xff09;或文本框中&#xff0c;然后旋转该形状。…

使用Docker启动的Redis容器使用的配置文件路径等问题以及Python使用clickhouse_driver操作clickhouse数据库

一、使用Docker启动的Redis容器使用的配置文件路径等问题 1.docker启动的redis使用的配置文件路径是什么 使用docker搭建redis服务&#xff0c;本身redis启动的时候可以指定配置文件的&#xff0c; redis-server /指定配置文件路径/redis.conf。 但手上也没有一个redis配置文件…

【Golang】合理运用泛型,简化开发流程

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

灵动AI视频最新AIGC 系统:支持多种模型切换 支持5端部署

灵动AI视频官网地址&#xff1a;https://aigc.genceai.com/

SeCo复现

表1 复现结果–CAM&#xff1a;74.751 Mask&#xff1a;76.47 Val&#xff1a;74.0 Test&#xff1a;73.7948&#xff0c;完全一致 表3 复现结果&#xff1a;0.233&#xff0c;完全一致 感想 第10篇完全复现的论文

知识点框架笔记3.0笔记

如果基础太差&#xff0c;搞不清基本交规的&#xff08;模考做不到60分&#xff09;&#xff0c;建议找肖肖或者小轩老师的课程看一遍&#xff0c;内容差不多&#xff08;上面有链接&#xff09;&#xff0c;笔记是基于肖肖和小轩老师的科目一课程以及公安部交管局法规&#xf…