重置 --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 之间的区别 的相关文章

  • GitLab CI - 添加标签时避免构建

    添加 git 标签时如何防止触发 gitlab ci 管道 我在本地运行此命令 而不是在 gitlab ci 作业中运行 git tag a xyz 然后推送标签 这会触发各种管道 我想排除其中一些管道的运行 我正在尝试对诸如以下问题的想法
  • .gitignore 文件夹内容[重复]

    这个问题在这里已经有答案了 可能的重复 在 Windows 上忽略 Git 存储库中的目录 https stackoverflow com questions 343646 ignoring directories in git repos
  • 恢复 git reset --soft

    我修改了我的分支中的一些文件并做了一个 git add all 但这添加了一些我不打算为提交添加的文件 所以我做了一个 git reset soft HEAD 2 instead of doing git reset HEAD 但之前的提交
  • 如何避免开发人员将凭证推送到 bitbucket?

    我们有一个应用程序 它使用 JSON 文件来定义数据库和其他 API 的连接字符串和凭据 理想情况下 这些凭证作为变量添加到 bitbucket 存储库中 并在 Jenkins 的构建期间进行替换 开发商在当地与他们合作时更换了他们 我们需
  • git 克隆错误:致命:git upload-pack:由于远程端可能的存储库损坏而中止

    我对 git 存储库具有读 写访问权限 但是当我尝试 git clone 时 出现以下错误 x ubuntu temp git clone email protected cdn cgi l email protection Corp ap
  • web2py git 集成 - localhost 和 pythonanywhere

    我完全不知道如何将 Github 集成到 web2py 中 我在 USB 上安装了 web2py任何地方的Python http www pythonanywhere com web2py概述文档chapter3http web2py co
  • Python 无法在 git bash 命令行中工作

    Python 不会在 git bash Windows 中运行 当我在命令行中输入 python 时 它会将我带到一个空行 而不会像在 Powershell 中一样显示它已输入 python 2 7 10 它没有给我错误消息 但 pytho
  • git for-each-ref - 按年龄过滤结果

    我正在使用以下命令here https stackoverflow com a 39251131 5812876 git for each ref format color cyan authordate format m d Y I M
  • Eventmachine start_tcp_server 无接受器 - 端口正在使用或需要 root 权限(运行时错误)

    我已经 3 天无法运行本地服务器了 重新启动我的计算机没有帮助 有几次 在反复尝试大约 40 50 次之后 它随机地起作用了 我不明白为什么 我尝试过一次不同的端口并且有效 但从那以后 没有端口有效 每次我尝试运行我的 Rails 服务器时
  • 无法将 git add origin git@anything 与新的 git 目录一起使用

    我有一个项目 我正在生成许多提交 因此它占用的空间正在快速增长 由于我有一个 gitlab 页面来推送提交 因此我决定最好删除本地 git 目录中的这些旧提交 因为我始终可以从 gitlab 获取它们 为此 我只需删除本地 git 目录 然
  • 如何在本地快速拉取拉取请求

    在合并拉取请求之前 我想在本地快速拉取请求并运行测试并测试一些内容 我还不想点击 gihub 合并拉取请求 我以为滑轮会有帮助http ejohn org blog pulley http ejohn org blog pulley 但我收
  • hg 或 git 中的两个完整目录/项目之间存在差异?

    我继承了一个最初存储在 CVS 中的项目以及所有修订 我做了相当多的编辑 并且我试图比较我在原始目录中所做的所有更改 关于添加的新文件与旧文件 hg git 是否有某种实用程序可以让我进行树差异或类似性质的操作 也就是说 新添加的文件 删除
  • 返回到存储库中的特定修订后提交并推送更改?

    我们需要及时返回到某个特定的提交 一些意外的改变是为了掌握 尝试恢复它挖得太深 所以 master 的状态很糟糕 现在我们希望master回到66ada4cc61d62afc 根据git 恢复到某个提交 https stackoverflo
  • 如何通过哈希显示提交的日期和时间

    I used git reflog识别我创建特定分支时的哈希值 我得到了哈希值fe1ddcdef 我还没有将此分支推送到远程 我现在正在尝试查找日期和时间fe1ddcdef发生 git reflog只告诉我 fe1ddcdef HEAD 1
  • 如何使用 vim 作为“git show”编辑器?

    全部如所述如何使用 vim 作为 git log 编辑器 https stackoverflow com questions 16666009 how do i use vim as git log editor不适用于 git show
  • gitlab 上的权限被拒绝(公钥)

    我的问题是我无法从 GitLab 推送或获取 不过 我可以克隆 通过 HTTP 或通过 SSH 当我尝试推送时出现此错误 权限被拒绝 公钥 致命 无法从远程存储库读取 从我看过的所有线程中 这是我所做的 在我的计算机上设置 SSH 密钥并将
  • git checkout 到分支需要很长时间

    我使用的是 Ubuntu 17 10 并且使用 git 版本 2 14 1 每当我从 master 创建一个分支并尝试签出它 或从它签出到 master 时 都会花费大量时间 大约几分钟 有时接近 10 分钟 确实 我有几 GB 的数据 但
  • 如何在Windows上分离“Git bash”中启动的“git gui”?

    例如 我开始 git bash 我导航到某个目录 I start git gui 我关闭控制台窗口或按 Ctrl C Git gui 的窗口消失了 即使我用过git gui disown 即使当我按 Ctrl C 时它不在前台 如何正确分离
  • 获取最新远程提交的 SHA1 [重复]

    这个问题在这里已经有答案了 可能的重复 git bash 如何检查是否有新的提交可用 https stackoverflow com questions 6006759 git bash how to check if theres a n
  • gitlab 请求将分支 A 合并到开发中(落后 3 次提交)我应该担心吗?

    在 gitlab 中创建合并请求时 我经常收到一条消息 请求将分支 A 合并到开发中 x 提交落后 gitlab想告诉我什么 我应该担心还是需要修复某些东西 什么 一段时间后合并请求在项目中打开时 由于其他人合并了自己的更改 您尝试合并到的

随机推荐

  • 从 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 我知道后者会重置索引 而前者则不会 但我试图了解其实质区别是什么 我什么时候会使用其中一个而不是另一个 我读了这个堆栈溢出帖子