【发布时间】:2020-03-09 18:06:32
【问题描述】:
我正在尝试在以下线程(最后一篇文章)中实现 Git 挂钩代码:Git: How to re-stage the staged files in a pre-commit hook。我将以下代码放在我的提交后挂钩git stash pop -q 中,执行后,我项目中的所有文件都被标记为删除(!),我需要恢复所有文件以恢复正常状态。除此之外,一切正常,我能够修改(在预提交挂钩中)已经为提交暂存的文件,并且提交本身是成功的,然后它包含我希望它包含的内容。我可能做错了什么?我是 Git 初学者,所以请使用简单的术语。
【问题讨论】:
-
git stash pop表示 运行git stash apply(使用相同的标志),然后,如果它表示成功,则运行git stash drop(在为应用选择的相同存储上)。-q标志只是使操作安静,所以这是应用,然后丢弃成功,默认存储,名为stash@{0}或只是stash。如果所有内容都标记为删除,则表明存储中的内容是一棵空树,其父级与您当前的树匹配,因此存储的父级与隐藏的工作树之间的区别是“删除所有文件” . -
(没有更多信息,很难猜到更多。)
-
所以你怀疑我创建的存储不正确?我完全使用来自stackoverflow.com/questions/26886363/… 的代码,即
git stash save -q --keep-index "current wd"来创建存储。 -
可能。或者
git stash save --keep-index没有创建一个存储,这是它的行为之一;在那种情况下,你会弹出一个不相关的藏匿处。很难用git stash编写好脚本。也可以查看stackoverflow.com/q/20479794/1256452 的所有答案。 -
如果我从
C:\Program Files\Git\bin\sh.exe手动运行git stash save -q --keep-index "current wd"命令,然后使用TortoiseGit 检查新创建的存储,那么它似乎很好。如果我将存储与工作树进行比较,我会看到预期的变化,因此存储的创建似乎是成功的。
标签: git pre-commit-hook post-commit-hook