Git 从隐藏中弹出而不更改索引

Git 从隐藏中弹出而不更改索引,git,githooks,lint,git-stash,Git,Githooks,Lint,Git Stash,背景: 我想在git预提交钩子中运行rubocop,但我假设我有一个隐藏的更改会导致它抱怨,而一个未隐藏的更改以某种方式解决了这个问题,有问题的更改会被rubocop忽略 到目前为止,我的解决方案是: 在运行rubocop之前,运行git stash——keep index-u以在运行rubocop之前隐藏所有未保存的更改 问题是: 在运行rubocop之后,git stash pop将工作树恢复到其以前的状态,但会将所有这些更改(以前未分级的)进行分级 我的问题: 是否有一个选项可以在不自动暂

背景:

我想在git预提交钩子中运行rubocop,但我假设我有一个隐藏的更改会导致它抱怨,而一个未隐藏的更改以某种方式解决了这个问题,有问题的更改会被rubocop忽略

到目前为止,我的解决方案是:

在运行rubocop之前,运行
git stash——keep index-u
以在运行rubocop之前隐藏所有未保存的更改

问题是:

在运行rubocop之后,
git stash pop
将工作树恢复到其以前的状态,但会将所有这些更改(以前未分级的)进行分级

我的问题:

是否有一个选项可以在不自动暂存任何弹出的更改的情况下弹出存储

是否有其他方法可以在项目上运行程序,而不是在工作树上运行可能发生的未分级更改


为了再现这种情况:

#设置虚拟回购
初始化
echo foo>文件
git add foo&&git commit-m“Initial”
#做一个改变并把它付诸实施
回音条>>文件
git添加文件
#再做一次改变,然后*不要*上演它
echo baz>>文件
#这就是我稍后要恢复的内容:
git状态&&git差异&&git差异--缓存
#仅隐藏未老化的更改(以及忽略/未跟踪的文件)
git隐藏--保留索引-u
#到目前为止,一切都是正常的
git状态&&git差异&&git差异--缓存
#在代码上运行任何脚本
鲁博科普。
#这就是问题所在:
吉特隐藏流行音乐
#现在,这两个更改都已准备好提交
是否有一个选项可以在不自动暂存任何弹出的更改的情况下弹出存储

这不是一个选择,不,但你可以通过自己的努力获得这种效果

index=`git write-tree`
git stash pop
git read-tree $index

@罗马瓦莱里真是个打字错误!修复了它,谢谢你让我知道:写一个好的预提交脚本比人们想象的要难,因为Git是从索引提交的。或者更确切地说,从一个索引开始,它可能是索引,也可能不是索引(
git-commit--only
vs
git-commit--include
)。使用
git-stash--keep-index
并不能在所有情况下都达到您想要的目的。我还没有实际测试过这个方法,但我认为测试提议提交的“正确”方法是使用
git checkout index
将提议的提交复制到单独的测试区域,在那里进行测试,并使用该结果(不要尝试在本地更新索引或工作树)。但是,如果您决定继续使用
git stash
,请记住在末尾使用
git stash pop--index
,以保持索引副本和工作树副本之间的区别。请注意,您必须首先重置工作树。非常感谢,
git write tree
正是我需要的提示,使其工作:D