git - git 是否有一个命令可以将工作树重置为 HEAD 但保留索引的分阶段更改?
问题描述
我知道有很多关于这个主题的帖子,但我似乎找不到这个具体的答案。
显然,这样做的一种方法是git commit
分阶段更改,git reset --hard HEAD
,然后git reset --soft HEAD~
,然后git add -u
,这是非常冗长的。
的默认行为reset
是--mixed
完成我所要求的相反。当然必须有一个单一的命令解决方案,或者至少是一个更好的方法。
解决方案
在 Git 2.23 之前,没有。
在 Git 2.23 或更高版本中,git restore
可以完成这项工作:
git restore -s HEAD
请注意,这git stash -k
并不能解决问题:它使工作树与index匹配,而不是HEAD
提交。1
git worktree add
在自 2.5 以来的所有 Git 版本中,根据当前提交创建第二个工作树可能更容易和/或更好:
git worktree add --detach <path> HEAD
<path>
您希望新工作树出现的位置在哪里。这样做的好处是不会触及您现有的工作树。(在 2.15 之前的 Git 版本中,我建议在两周内完成你在这个添加的工作树中所做的任何事情,然后将其删除,因为在这些版本的 Git 中关于添加的工作树有一个令人讨厌的小错误。如果你只是对工作树文件执行此操作,但错误本身是无害的。)
在 2.23 之前的 Git 版本中,您可以执行以下操作:
git stash
# do whatever your job is here, followed by `git reset --hard` if needed
git stash apply --index
git stash drop
(或者git stash pop --index
; 我只是想把申请和删除分开)。
1git stash -k
以通常的方式进行两次存储提交,因此它们与往常一样。但是,git reset --hard
它不是像常规的非-k
git stash
那样做,而是强制调整工作树以匹配存储提交。
重点git stash -k
是允许您运行某种使用工作树内容的测试,而不必将隐藏的索引提取到另一个工作树。例如,如果您有一个使用工作树中的内容而不是索引中的内容的自动化测试系统,您可以git stash -k
运行测试,然后git reset --hard
使存储再次适用并应用和删除存储。
令人讨厌的是,如果索引和工作树匹配,则git stash
不会进行存储,因此很难用于进行这种自动化测试,因为无法保证它确实进行了存储。HEAD
git stash -k
推荐阅读
- c# - Net Core - 为什么异常中间件这么慢?
- javascript - 如何重构这个 NativeScript 简单图像 css 交换器
- php - 根据用户定义的偏好对 PHP 数组进行排序
- php - 错误 #1251 - 无法登录 MySQL 服务器
- excel - 如何根据分隔符提取字符串值
- c# - Visio 2016 - AxMicrosoft.Office.Interop.VisOcx - 在网络上保存时的奇怪行为
- git - “这个分支有必须解决的冲突”,但它已经合并了
- python - 列表理解测试中的变量被视为未在 python3 的 exec 中定义
- django - 如何解决其他应用程序的静态文件无法在 Django 中加载到我的应用程序?
- html - 将鼠标悬停在文本上时难以更改文本颜色