重置 --soft 和 --mixed 之间的区别

2024-01-08

我是 GIT 新手,并试图理解两者之间的区别git reset --soft and git reset --mixed。我知道后者会重置索引,而前者则不会,但我试图了解其实质区别是什么:我什么时候会使用其中一个而不是另一个?

我读了这个堆栈溢出帖子 https://stackoverflow.com/questions/2530060/can-you-explain-what-git-reset-does-in-plain-english,这似乎表明mixed适合在重新提交之前进行一些更改,同时soft适合立即重新承诺。我正在使用 SourceTree,并且临时窗格已关闭,并且很难理解为什么会这样;我这辈子都看不到任何actual真正的差异。

我能看到的唯一区别是,我重置的新添加的文件显示为通过软重置添加的,但在混合时则不然。但无论哪种情况,我都可以成功地对新添加的文件进行更改,然后重新提交。当然,我对现有文件所做的任何新更改都会无缝添加到我当前未提交的更改中,准备好提交。

我是否必须使用暂存窗格和源树才能看到任何实际差异,或者我只是错过了一些东西?需要明确的是,根据我现在设置该工具的方式,我看到了未提交的更改,这些更改是我一步提交的。


首先,阅读上面@Ant P建议的链接。

git reset --mixed、--soft 和 --hard 之间有什么区别? https://stackoverflow.com/questions/3528245/whats-the-difference-between-git-reset-mixed-soft-and-hard

让我用一些正在发生的事情的模型来补充这一点。

“git reset”适用于三种不同的东西。

  1. HEAD 参考。这表明了参考点。这有多种用途,但也许与您最相关的是,这将是您下一次提交的父项(假设您不再更改它)。
  2. 你的工作树。
  3. 索引。 (SourceTree 中的“Staging”窗格)。这就是 git 用来构建下一次提交的内容。它实际上并不是直接从您的工作树创建提交。这就是为什么你需要执行“git add”。

因此,如果您创建一个包含两个文件 foo.txt 和 bar.txt 的 git 存储库。

在您的第一个修订版中,将“v1”放入每个文件中。 在第二个修订版中,将“v2”放入每个文件中。 现在,将“v3”放入每个中,然后执行“git add foo.txt”。

此时,您改变了主意,并决定重置为第一个修订版。你希望最终处于什么状态?

  • 'git reset --hard HEAD^':重置一切。您的树返回到第一个修订版,没有任何更改排队到索引中。
  • 'git reset --soft HEAD^':仅重置 HEAD 指针。索引仍保持重置前的状态。这意味着第二次提交中的所有更改,加上您已经添加的任何内容。因此它具有您放入 foo.txt 中的“v3”,以及您在第二次提交的第一次尝试中提交的“v2”。
  • 'git reset --mixed HEAD^':这只是重置索引,用当前版本填充它。实际上,它会撤消您可能已完成的任何“git add”(或“git rm”)。

那么为什么要执行 git reset --soft 呢?

假设您创建了一个提交,并认为您没有做对,并且希望在推送之前修复它。 (重要!一旦你推动,你需要将提交视为永久性的,否则你会让其他人都感到困难)

您可以进行更改,然后执行“git commit --amend”。但这仅适用于最后一次提交。或者您可以执行“git rebase --interactive”,并对特定提交进行更改、合并提交等。

或者,您可以执行“git reset --soft”,添加、更改、rm 或重置任何文件,直到获得新提交所需的状态,然后将其作为新提交提交。

'git reset --mixed'(或没有 --mixed;这是默认值)仅对于撤消 'git add' 或 'git rm' 有用。

最重要的是,在我看来,您可能不想在交互式使用中使用 --soft 。使用它没有任何问题,但是“git commit --amend”或“git rebase --interactive”可能是获得您想要的内容的更直观的方式。

'git reset --mixed' 你会经常使用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

重置 --soft 和 --mixed 之间的区别 的相关文章

  • Git 无效的修订范围 Symfony2 Composer 外部包

    RuntimeException Failed to execute git log 18efcf67d236d5bbf46ac67820250dffd0474b6e 94e2146f525fa1367e15646fa273e5b34f92
  • git 预提交钩子格式代码 - Intellij/Android Studio

    本要点展示了如何在预提交时使用 Eclipse 格式化程序自动格式化 Java 代码 Source https gist github com ktoso 708972 https gist github com ktoso 708972
  • 忽略 git 中的本地配置文件

    Rails 应用程序中有一些本地文件 属于我们存储库的一部分 我希望 git 忽略它们 基本上 我希望 git 忽略我对 config environments 目录和 config application rb 文件中的任何内容所做的所有
  • git push heroku master 权限被拒绝

    我正在关注 ruby railstutorial 我运行命令 git push heroku master 它吐出了这个错误 Permission denied publickey fatal Could not read from rem
  • git pull,忽略深度,如何不拉取整个历史记录?

    我们有一个巨大的多 GB git 存储库 主要是二进制对象 克隆需要几天时间 实际的主分支 没有历史记录 只有大约 20MB 所以我想 深度为 1 的 git 克隆就是解决办法 然而 现在我需要将某人的更新拉到主服务器 我们没有分支 当我拉
  • Git:显示分支之间的差异,忽略合并的提交

    我的存储库历史记录看起来像这样 x y z branch a b c d e master 我想获得 branch 完整历史记录的单个差异 即 像 git diff 输出 我不想要像 git log p 产生的一大堆差异 而不包括任何从 m
  • 如何 git grep 仅一组文件扩展名

    如何执行 git grep 并将检查的文件限制为一组文件 我希望能够 grep cpp 和 h 文件的内容来查找 MyFunc 例如 git grep MyFunc hc 但是 这也匹配 c 文件和 cs 文件 Use git grep M
  • 有谁知道类似于 SVN Time-Lapse View 的 Git 工具 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 SVN Time Lapse View 是一个跨平台查看器 可以下载文件的所有修订版本 并允许您通过拖
  • 自动将所有 GitHub 存储库镜像到 gitlab

    对于 GitLab 必须手动为每个存储库设置拉 推镜像 我想知道那里有any way可以自动将所有 Github 存储库同步到 GitLab 这样 当您在 GitHub 中创建新的存储库时 GitLab 中的存储库将自动创建 并充当拉取镜像
  • git 显示已添加到 gitignore 的文件中的更改?

    我已经将 log2 文件夹和 main js 文件添加到 gitignore 如屏幕截图所示 但即使执行后git rm cached r我仍然可以看到 git 正在检测 main js 和 log2 文件夹内文件的更改 怎么会 这些的常见问
  • 丢失了我在 GIT 中的提交。你会不小心删除提交吗?

    我正在使用 git gui 但看不到我的分支 我知道我今天检查了一些东西 在完成提交并使用分支查看器验证后 我更改为较早的分支 我对之前的分支进行了更改 然后想返回到当前的分支 但我再也看不到它了 任何帮助都会很棒 回答你的问题 在大多数情
  • 如何合并两个连续的 git 存储库

    我有一个相当独特的情况 我有一个名为 Project1 的存储库 我在其中工作了一些时间 几个月 一年后 我创建了存储库 Project1 Again 从 Project1 停止的地方开始 现在 我希望修订历史记录是连续的 因此我希望它们合
  • apt-get 无法在 ubuntu dockerfile 中工作

    我对 docker 相当陌生 正在尝试通过编写自己的镜像来学习 并且目前正在阅读 Docker 的实际操作 ISBN 1633430235 在我自己的代码和书中的示例 第 146 页 中 我想通过 dockerfile 安装 git My
  • git 日志历史记录图,每次提交一行,彩色,带有日期

    我需要的格式如下 git log decorate graph oneline date order 但我也需要它 包含日期 短 具有相同的颜色 I tried git log decorate graph oneline date ord
  • 如何在 macOS 上将 Git 升级到最新版本?

    我刚刚购买了一台装有 OS X Lion 的新 Mac 我在终端中检查了默认安装的 git 版本 我得到了答案 git version gt git version 1 7 5 4 我想将 git 升级到最新版本 1 7 8 3 因此我下载
  • 如何克隆特定的 Git 标签

    From git clone 1 手册页 http git scm com docs git clone branch还可以在结果存储库中的该提交处获取标签并分离 HEAD 我试过 git clone branch
  • 带有 git Remote 的 Gem 文件在 Heroku 推送上失败

    我的 gemfile 中有以下行 gem client side validations git gt email protected cdn cgi l email protection Dakuan client side valida
  • Git 2.2.x 无缘无故更新旧包文件的时间戳

    Git 2 2 0 和 2 2 1 似乎修改了旧的时间戳 git objects pack pack pack偶尔会无缘无故地文件 它只是改变时间戳 内容是相同的 调试这一点很困难 因为它似乎很少进行更改 我在 2 2 0 之前的任何 Gi
  • 使当前提交成为 Git 存储库中唯一(初始)提交?

    我目前有一个本地 Git 存储库 我将其推送到 Github 存储库 本地存储库有约 10 次提交 Github 存储库是其同步副本 我想要做的是从本地 Git 存储库中删除所有版本历史记录 以便存储库的当前内容显示为唯一提交 因此存储库中
  • 仅使用 Git grep 的文件名

    我只想查看文本中包含特定单词的不同文件 current directory git grep word 显示文件中具有匹配单词的每一行 所以我尝试了这个 current directory git grep word files with

随机推荐

  • 从 PowerShell 使用 System.IO 访问 MTP 存储

    我正在尝试访问 MTP 设备存储以自动执行文件复制 备份等 如果 Windows 资源管理器能够打开并浏览 Android 设备内部存储和连接的 SD 卡 我如何使用 PowerShell 访问这些存储 我发现了很多提示 例如 获取设备 I
  • Java泛型中如何获取类型变量的类

    我见过类似的问题 但没有多大帮助 例如我有这个通用类 public class ContainerTest
  • 使用区域在 UML 活动图中循环

    我正在 UML 活动图中对循环进行建模 它适用于简单的条件节点 图 1 但我正在寻找一种更具表现力的方法来强调循环语义 所以我来到了所示的 区域 或 可中断区域 here http www pst ifi lmu de stoerrle V
  • 导入错误:DLL 加载在 Jupyter 笔记本中失败,但在 .py 文件中工作

    我安装了突破检测 https github com roland hochmuth BreakoutDetectionAnaconda 环境中的模块 当我尝试使用导入模块时import breakout detection在 jupyter
  • 如何在 MATLAB 中删除向量中一组索引处的元素?

    我有一个包含 100 个元素的向量 我有另一个向量 其中包含我想要从此向量中删除的元素的索引位置 我该怎么做呢 vector indecies example gt gt a 1 10 gt gt a 3 4 7 a 1 2 5 6 8 9
  • 为什么贪心算法找不到二分图的最大独立集?

    我试图使用贪心法解决二分图上的最大独立集问题 所以发现这篇文章正是我想做的 但我只关注二分图 答案中的反例不是二部图 是否有任何二分图无法使用 Greedy G S While G is not empty Let v be a node
  • 将 Google Analytics 与 Require.js 结合使用时出现问题

    我正在使用 require js http requirejs org http requirejs org 对于我网站上的许多功能 到目前为止它似乎运行良好 不过 我在尝试包含 Google Analytics 代码时遇到了问题 该代码似
  • php 的分支预测

    刚刚读了一篇很棒的文章分支预测 https stackoverflow com questions 11227809 why is processing a sorted array faster than an unsorted arra
  • 为什么Maven打出来的包没有附带依赖?

    我已经按照最简单的 Maven 示例 https maven apache org guides getting started maven in five minutes html并做出以下内容pom xml file
  • C#:'is' 关键字并检查 Not

    这是一个愚蠢的问题 但您可以使用此代码来检查某些东西是否是特定类型 if child is IContainer 有没有更优雅的方法来检查 NOT 实例 if child is IContainer A little ugly silly
  • 如何使用 EF Core 3.1 将 IEnumerable 的属性存储在 Cosmos 表中

    我的项目使用 EF Core 3 1 并以 Azure Cosmos 作为数据库 我有一个这样的实体 public class MyEntity public IEnumerable
  • 使用 Flask-admin 将文件附加到模型

    我正在使用 Flask Admin 为网站提供管理界面 如何处理文件上传到 sqlalchemy 模型 例如 class Product db Model tablename products id db Column db Integer
  • 如何从 Postgres 的预订中查找第一个免费开始时间

    人们的工作时间为上午 10 00 至晚上 21 00 周日和公共假期除外 每隔 15 分钟为他们预留一个工作岗位 工作时间为15分钟至4小时 整个工作必须适合一天 如何查找从当前日期和时间开始在 Postgres 9 3 中未在给定持续时间
  • 使用 npm 运行 bash 脚本

    我想尝试使用 npm 运行 Web 应用程序的各种构建任务 我知道我可以通过添加一个来做到这一点scripts领域到我的package json像这样 scripts build some build command 当您有更复杂的命令和一
  • 创建一个可以按任意顺序包含 int 和 string 的类型

    我正在关注这个哈斯克尔简介 http www cs auckland ac nz references haskell haskell intro html goodies html 而这个特定的地方 用户定义类型 2 2 我发现特别晦涩难
  • 已删除的实体传递给持久异常

    我有这样的实体 文档 恩 到 1 文件类型 1 到 n 财产种类 1 到 n 文件属性 我只是尝试删除如下文档 实体管理器 删除 文档 但发生错误 16 45 51 499 错误 Seam Resource Servlet servlet
  • Eclipse(带 adt)不会看到/识别正在运行的 avd

    我已经尝试这个一周左右了 我已经按照教程让 hello android 工作了 但是当 AVD 启动时 程序无法运行 我正在运行 Windows 7 64 位和 eclipse 3 5 2 运行 adt 0 9 9 和 SDK r7 sdk
  • 创建具有删除功能的自定义 UIButton 类

    我有一个 UIButtons 网格 当我点击 编辑 按钮时 我希望每个按钮上都出现一个删除按钮 按下该按钮时 会删除该按钮 以及关联的数据 有点像苹果的主屏幕 当你按住一个按钮时 它就会开始摆动 角落里有一个 X 根据这篇文章 子类 UIB
  • 协作时如何管理配置文件?

    我正在编写一个简短的脚本 在页面顶部包含一些简单的变量 我想和一位朋友一起处理它们 但我们不确定如何管理每次为我们中的一个人拉取后需要更改的变量 从而向 git status 添加不必要的垃圾 我想过为我们每个人创建不同的命名分支 然后主服
  • 重置 --soft 和 --mixed 之间的区别

    我是 GIT 新手 并试图理解两者之间的区别git reset soft and git reset mixed 我知道后者会重置索引 而前者则不会 但我试图了解其实质区别是什么 我什么时候会使用其中一个而不是另一个 我读了这个堆栈溢出帖子