【问题标题】:Why are all my files marked for deletion by Git after I do "git stash pop -q"?为什么在我执行“git stash pop -q”后,我的所有文件都被 Git 标记为删除?
【发布时间】: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


【解决方案1】:

-q 是问题

安静的选项似乎有问题

https://www.spinics.net/lists/git/msg369570.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-09
    • 1970-01-01
    • 2012-12-25
    • 1970-01-01
    相关资源
    最近更新 更多