iis服务器助手广告
返回顶部
首页 > 资讯 > 精选 >Git命令git-reset怎么使用
  • 517
分享到

Git命令git-reset怎么使用

2023-07-05 16:07:58 517人浏览 八月长安
摘要

这篇文章主要介绍了git命令git-reset怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Git命令git-reset怎么使用文章都会有所收获,下面我们一起来看看吧。git-reset的作用是重置当前

这篇文章主要介绍了git命令git-reset怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Git命令git-reset怎么使用文章都会有所收获,下面我们一起来看看吧。

git-reset的作用是重置当前分支的HEAD指针,将HEAD指针指向特定的状态。

使用概述

git reset [<tree-ish>] [--] <pathspec>git reset [--pathspec-from-file=<file> [--pathspec-file-nul]] [<tree-ish>]git reset (--patch | -p) [<tree-ish>] [--] [<pathspec>]git reset [--soft | --mixed [-N] | --hard | --merge | --keep] [<commit>]

前三行reset命令的作用是将指定的<tree-ish>内容作为参考依据,然后把内容拷贝到目标的缓存区中。

<tree-ish>就是像树一样的东西,git中是有很多都能组成树的,比如commit树或者tag树。

最后一行reset命令的作用是将当前分支的HEAD指针指向<commit>,同时可以使用多种可选项来控制是否修改缓存区或工作区。

在以上所有的命令形式中,都是把<tree-ish>或<commit>默认作为HEAD指针。

git reset [<tree-ish>] [--] <pathspec>

该方法有如下规则:

  • 会将与<pathspec>相匹配的路径资源在缓存区中重置成<tree-ish>中的状态。不了解<pathspec>是什么?

  • 被提交到缓存区中的改动会被还原到工作区中。

举个?

假设项目中有一个coffee.txt文件,文件内容如下:

卡布奇诺纳瑞冰-19.9¥标准美式-14.9¥香草拿铁-19.9¥生椰爱摩卡-19.9¥...

我们使用git的tag命令将当前的版本标记成v1.0.0(这里使用tag标签作为)。

随后修改coffee.txt文件,修改内容如下:

卡布奇诺纳瑞冰-19.9¥ --> 卡布奇诺纳瑞冰-14.9¥标准美式-14.9¥ --> 标准美式-9.9¥香草拿铁-19.9¥ --> 香草拿铁-14.9¥生椰爱摩卡-19.9¥ --> 生椰爱摩卡-14.9¥...

变更了coffee.txt文件后,再使用git tag打上了v1.0.1标记。

如果此时想将coffee.txt文件还原成v1.0.0版本中的文件,就可以使用git reset命令并指定为v1.0.0,操作如下:

git reset v1.0.0 coffee.txt

使用vscode查看缓存区的文件变动:

Git命令git-reset怎么使用

可以看到图中的右侧的代码改动对比,此时缓存区中的coffee.txt文件已经成功被重置成v1.0.0版本中文件的状态(规则1)。并且此时v1.0.1已经提交到缓存区中的变动也被还原到了工作树中(规则2)。

Git命令git-reset怎么使用

可以看出git reset命令与git add命令作用相反,一个是将指定的资源添加到缓存区,另一个则是从缓存区中移除。并且这个命令与git restore [--source=<tree-ish>] --staged <pathspec>具有相同的作用,对restore感兴趣的可以看看这篇文章。

上面说过了,在使用reset命令后,此时缓存区中文件内容是v1.0.0的,可以配合git restore命令将缓存区中的内容还原到工作区中然后进行修改:

git restore coffee.txt --staged

也可以根据需要选择还原工作区的内容:

git restore coffee.txt --worktree

git reset [--pathspec-from-file=<file> [--pathspec-file-nul]] [<tree-ish>]

在上面的例子中每次进行reset和restore的都是想同的<pathspec>路径(coffee.txt)。因为该文件路径比较简单,所以每次操作都比较方便输入。但是在一些情况下,可能需要reset比较复杂的<pathspec>路径,比如项目目录层次较深,那么很可能需要输入一长串的<pathspec>路径,这样每次进行操作就会很麻烦,所以git提供了一个--pathspec-from-file选项,让我们能够直接指定一个文件,这个文件就包含了可能需要重复使用的<pathspec>路径。这里有更详细的用法。

该文件每一行都是一个<pathspec>,如果有多个<pathspec>使用换行符作为分隔。当然也可以使用--pathspec-file-nul让NUL作为每一个<pathspec>的分隔符。

git reset (--patch | -p) [<tree-ish>] [--] [<pathspec>]

交互式的选择<tree-ish>与缓存区之间的差异而产生的hunks。这些被选择的hunks将会撤销缓存区中的产生的修改。这里有更详细的--patch选项用法。

git reset [<mode>] [<commit>]

该命令会把当前分支的HEAD指针指向某个<commit>,然后由<mode>决定是否同时更新缓存区或工作区的内容。<mode>默认值是--mixed,且必须是以下几种:

--soft

工作区和缓存区中的文件变动都将被保留,然后将HEAD指针指向<commit>。

还是以咖啡菜单为?,假如第一次commit到仓库中的文件内容如下:

卡布奇诺纳瑞冰-19.9¥标准美式-14.9¥香草拿铁-19.9¥生椰爱摩卡-19.9¥...

然后做第二次commit操作,删除标准美式,增加生椰拿铁:

卡布奇诺纳瑞冰-19.9¥-标准美式-14.9¥+生椰拿铁-19.9¥香草拿铁-19.9¥生椰爱摩卡-19.9¥...

在commit后,修改卡布奇诺纳瑞冰的价格,添加到缓存区。再修改香草拿铁的价格,保留在工作区:

-卡布奇诺纳瑞冰-19.9¥+卡布奇诺纳瑞冰-14.9¥ // 添加到缓存区中生椰拿铁-19.9¥-香草拿铁-19.9¥+香草拿铁-14.9¥ // 保留在工作区生椰爱摩卡-19.9¥...

此时我想保留工作区和缓存区做的改动,并且将HEAD指针指向第一次commit。这时可以使用--soft选项实现:

git reset HEAD^ --soft // 这里使用HEAD^表示上一个commit,同样也可以使用hash id

使用git log查看当前HEAD指针确实已经指向第一个commit,第二个commit被抛弃了:

Git命令git-reset怎么使用

同时所有的工作区和缓存区的改动都被保留了:

Git命令git-reset怎么使用

当前只有两次的commit,是为了方便演示--soft选项的作用。但是在实际开发中,我们可能会commit多次,尤其是在测试环境改几个BUG就要提交到发布平台,这样会导致很多无意义的commit。这时候就可以使用--soft选项,重置HEAD到指定的<commit>只保留一到两个重要的commit。

--mixed

重置缓存区,但是会保留工作区的内容,这是<mode>的默认值。

相信在理解了--soft作用后,理解--mixed不难,上面例子中如果是使用--mixed那么最终结果如下:

Git命令git-reset怎么使用

该选项会重置缓存区,但是保留工作区的改动,并将当前指针指向<commit>。

--hard

重置缓存区和工作区中的所有的变动,并且将指针指向<commit>。

--hard更加的简单粗暴,我们将--soft例子改为--hard来查看结果:

Git命令git-reset怎么使用

如图所示,工作区和缓存区的内容都被重置了。不止是如此,就连Untracked文件同样也会被删除。

--merge

该选项的作用,看字面意思就知道大概就是把当前分支和指定的<commit>进行合并,规则如下:

  • 重置缓存区,任何已经添加到缓存区的改动都将被抛弃

  • 如果<commit>和HEAD之间有文件存在不同(这个不同指的是文件被删除或者新增),那么将会把该文件重置成<commit>中的状态(新增或删除)。

  • 如果<commit>和HEAD之间有文件存在不同(这个不同是指文件内容的不同),且此时工作区也存在未提交的改动,那么本次的reset将会被终止。

  • 如果一个文件在<commit>和HEAD中完全相同,但是它的工作区存与缓存区存在着不同(也就是改动未提交到缓存区),那么该文件在工作区的改动在重置之后就会被保留。

我们举个例子来验证一下以上列出的规则,假设此时的咖啡店项目有如下的几个commit。

第一个commit和文件内容如下:

Git命令git-reset怎么使用

第一个commit中只有一个coffee.txt菜单文件,此时如果咖啡店引进了新品种开始卖果汁,那么就需要新增果汁菜单文件fruits.txt,于是就有了第二个commit:

Git命令git-reset怎么使用

此时我们做一些改动来验证1,2,4这几点的规则,改动后的文件如下:

Git命令git-reset怎么使用

首先修改coffee.txt文件,新增一款生椰拿铁咖啡,保留在工作区中。然后增加咖啡豆菜单文件beans.txt,将其添加到缓存区中。

假设因需求变动,咖啡豆菜单文件在缓存区中需要清除,果汁菜单文件需要删除,只有咖啡菜单中新增的生椰拿铁的改动需要保留。那么就可以使用git reset --merge将HEAD和commit-1进行合并,操作如下:

git reset --merge HEAD^

结果如下:

Git命令git-reset怎么使用

执行命令reset命令产生了如下效果:

  • 将当前HEAD指针指向了commit-1

  • 将缓存区中的beans.txt文件抛弃(规则1)

  • HEAD(commit-2)和commit-1中的fruits.txt文件存在不同(commit-2中新增fruits.txt),所以会将fruits.txt删除(规则2)

  • coffee.txt文件新增生椰拿铁的改动被保留在工作区中(规则4)

再来验证一下第3点规则,假设咖啡店项目此时第一个commit如下:

Git命令git-reset怎么使用

接下去同样新增水果茶菜单,然后再修改coffee.txt文件,第二个commit如下:

Git命令git-reset怎么使用

然后在HEAD中再修改coffee.txt文件,删除掉标准美式品种:

Git命令git-reset怎么使用

此时,如果我们再使用git reset --merge HEAD^就无法再进行重置,该操作会被git终止(规则3)。并且控制台会进行报错提示:

Git命令git-reset怎么使用

--keep

该选参的作用和--merge相似,唯一的区别就是缓存区中被重置的会被保留在工作区中。

构造如下第一个commit:

Git命令git-reset怎么使用

改造第二个commit:

Git命令git-reset怎么使用

在HEAD中进行修改

Git命令git-reset怎么使用

使用git reset --keep命令:

Git命令git-reset怎么使用

从结果上来看,只有fruits.txt文件被删除了,beans.txt文件被重置回了工作区中。coffee.txt文件的改动也被保留了。

--[no-]recurse-submodules

关于“Git命令git-reset怎么使用”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“Git命令git-reset怎么使用”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网精选频道。

--结束END--

本文标题: Git命令git-reset怎么使用

本文链接: https://www.lsjlt.com/news/353070.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Git命令git-reset怎么使用
    这篇文章主要介绍了Git命令git-reset怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Git命令git-reset怎么使用文章都会有所收获,下面我们一起来看看吧。git-reset的作用是重置当前...
    99+
    2023-07-05
  • Git Reset和Git Revert命令有什么区别
    这篇文章主要为大家展示了“Git Reset和Git Revert命令有什么区别”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Git Reset和Git Revert命令有什么区别”这篇文章吧。...
    99+
    2023-06-15
  • git的使用——reset
    git reset 命令用于回退版本,可以指定退回某一次提交的版本。 有三种命令方式 git reset [--soft | --mixed | --hard] [HEAD] 知识前提:git重要的三...
    99+
    2023-08-31
    git github 服务器
  • Git命令怎么使用
    今天小编给大家分享一下Git命令怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。常用 Git 命令清单。几个专用名词的...
    99+
    2023-06-29
  • 怎么使用git命令
    今天小编给大家分享一下怎么使用git命令的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。安装Git在开始使用Git之前,您需要...
    99+
    2023-07-05
  • git pull命令怎么使用
    这篇文章主要介绍“git pull命令怎么使用”,在日常操作中,相信很多人在git pull命令怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”git pull命令怎么使用”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-21
  • Git常用命令及怎么在IDEA中使用Git
    本篇内容主要讲解“Git常用命令及怎么在IDEA中使用Git”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Git常用命令及怎么在IDEA中使用Git”吧!Git下载与安装安装完成后可以在任意目录...
    99+
    2023-07-05
  • git中的命令怎么使用
    这篇文章主要讲解了“git中的命令怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“git中的命令怎么使用”吧!git 的安装本文使用的是win7平台。 Git可以在Linux、Unix...
    99+
    2023-06-03
  • Linux下怎么使用git命令
    本篇内容介绍了“Linux下怎么使用git命令”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Git(读音为/gɪt/)是一个开源的分布式版本...
    99+
    2023-06-28
  • git clone命令怎么用
    本篇内容介绍了“git clone命令怎么用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!git clone我们使用 git cl...
    99+
    2023-06-17
  • git init命令怎么用
    本篇内容主要讲解“git init命令怎么用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“git init命令怎么用”吧!git initGit 使用 git init 命令...
    99+
    2023-06-17
  • Linux git命令怎么正确使用
    这篇文章主要介绍了Linux git命令怎么正确使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Linux git命令怎么正确使用文章都会有所收获,下面我们一起来看看吧。git是目前世界上最先进的分布式版本控...
    99+
    2023-06-28
  • Git的设置命令怎么使用
    今天小编给大家分享一下Git的设置命令怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、设置用户名和邮箱地址在使用 ...
    99+
    2023-07-05
  • linux中GIT命令怎么用
    小编给大家分享一下linux中GIT命令怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!设置用户信息这应该是安装完 git 的***步。我们将添加用户信息 (...
    99+
    2023-06-16
  • git revert和git reset有什么区别
    这篇文章将为大家详细讲解有关git revert和git reset有什么区别,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。git revert和git reset的区别git revert 是生成一个新...
    99+
    2023-06-09
  • Git常用命令的使用
    目录Git基础要点Git常用命令Git分支服务器上的Git分布式Git版本控制是一种记录若干文件内容变化,以便将来查阅特定版本修订情况的系统. 关于版本控制分为三种:本地版本控制系统...
    99+
    2023-05-19
    Git常用命令 Git 命令
  • git 常用命令
    1. 新建代码库# 在当前目录新建一个Git代码库 $ git init # 新建一个目录,将其初始化为Git代码库 $ git init [project-n...
    99+
    2023-05-30
    git linux 命令大全
  • git常用命令
    1、第一次初始化 git initgit add .git commit -m ‘first commit’git remote add origin git@github.com:帐号名/仓库名.gitgit pull origin m...
    99+
    2023-10-29
    常用命令 git
  • git clone命令如何使用
    本篇内容介绍了“git clone命令如何使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!“git clone”能克隆指定分支代码。“gi...
    99+
    2023-07-05
  • Linux常用命令git怎么用
    这篇文章主要为大家展示了“Linux常用命令git怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Linux常用命令git怎么用”这篇文章吧。Linux常用命令it命令是文字模式下的文件管理...
    99+
    2023-06-28
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作