如何使git stash包含未暂存的新文件?

49

我对git并不是很精通,但已经使用它有一段时间了。最近我注意到关于存储的一些奇怪行为,它似乎只对我部分起作用。

例如,今天我尝试存储4个未提交的更改。1个文件被添加到存储中,剩下的3个仍然是未提交的更改。我尝试了几次,在第一次尝试后,我只得到“没有本地更改可保存”,但状态仍显示3个未提交的更改。

然而,偶然发现,当我首先阶段之前无法存储的更改时,它们将正常存储。我进行了一些测试,结果是可重复的:如果所有更改都未提交,则仅其中一个更改会被存储。如果"问题"更改被暂存,则所有更改都会被存储(无论"好"更改是否被暂存,它总是会被存储)。

这是一个错误还是我的操作有误?

我使用的是Git for Windows 2.8.2和Git Extensions 2.48.05。

无论我是通过Git Extensions GUI还是通过控制台尝试存储更改,都无效。

编辑:如果我在存储之前暂存了所有4个更改,则当我执行存储弹出操作时,3个问题更改仍然是暂存的,而总是被存储的好更改则未提交。因此,存储弹出不会将状态回到存储之前的状态。这也是可重复的。


5
也许那些没有被暂存的文件没有被 Git 跟踪?试试用 git stash -u 命令。 - Jonathan.Brink
3
@Jonathan.Brink:那就是答案。无法存储的更改是指那些尚未被追踪的新文件。我使用了“-u”标志,它们顺利地被存储了。如果您想把这个作为回答,我会接受它。 - Simon Elms
1
这回答解决了你的问题吗?如何隐藏未跟踪的文件? - Seth Battin
1个回答

84

问题似乎是默认情况下,stash命令不会包括未跟踪的文件。

要包括未跟踪的文件,请使用-u--include-untracked)标志:

git stash -u
如果使用了 --include-untracked 选项,则所有未跟踪的文件也会被储藏并使用git clean清除,将工作目录留在非常干净的状态。

13
正如在这个早期问题的答案中提到的,使用git stash -u永久删除被忽略的文件夹 - phillchill
2
命令 git stash -u 确实解决了问题,但使用 GIT 扩展时,如果有一个配置设置可以在添加到存储时自动使用 -u 就太好了。在我的版本(2.51)中,似乎没有这个设置。有没有想法,这可能会在什么时候发生(或者已经完成了)? - Dominique
2
@Dominique 你可以做的一件事是创建一个别名,这样你就不用担心添加 -u 标志了:git config --global alias.stashu "stash -u"。然后你可以使用别名来调用:git stashu - Jonathan.Brink
2
@Dominique和其他人想知道,如果你谈论的是Git Extensions,即Windows Git GUI,而不是简单地进行Stash操作,请选择创建一个stash并勾选包括未跟踪的文件。 - PhiLho

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接