我对一个文件进行了更改,再加上一个新文件,我想在切换到另一个任务时使用git stash将它们保存起来。但是git stash本身只存储对现有文件的更改;新文件仍保留在我的工作树中,打乱了我未来的工作。我如何保存这个未跟踪的文件?


当前回答

我过去常常思考和渴望相同的特征。但随着时间的推移,我发现它确实不需要。当你藏起来时,留下新文件是可以的。它们不会发生任何“坏”情况(当您签出其他文件时,git将出错,不会覆盖现有的未跟踪文件)

而且,由于git stash和git stashpop之间的时间间隔通常很短,因此您将再次需要未跟踪的文件。所以我想说,当你在做其他事情时(在git stash和git stashpop之间),文件以git状态显示所带来的不便要比工作带来的不便小得多,而且需要注意的是,否则尝试将未跟踪的文件添加到你的stash中所需的费用。

其他回答

将文件添加到索引:

git add path/to/untracked-file
git stash

索引的全部内容,加上对现有文件的任何未标记的更改,都将被放入存储库。

2020年更新答案

我很惊讶,这个页面上没有其他答案提到git stash push。

这篇文章帮助我理解了:

命令gitstash是gitstashpush的简写。在此模式下,不允许使用非选项参数来防止拼写错误的子命令生成不需要的隐藏项。这个命令git stash save还有另一个别名,它已被弃用,取而代之的是git stass push。默认情况下,git在执行隐藏时忽略未跟踪的文件。如果需要将这些文件添加到stash中,可以使用-u选项,告诉git包括未跟踪的文件。如果指定了-a选项,也可以添加忽略的文件-a将包括未跟踪和忽略的文件。

我关心命名我的存储,我希望它们包含未跟踪的文件,所以我最常用的命令是:git stash push-u-m“whatIWantToNameThisStash”

从git1.7.7开始,gitstash接受--include未跟踪选项(或短手-u)。要将未跟踪的文件包含在存储库中,请使用以下任一命令:

git stash --include-untracked
# or
git stash -u

警告:如果您的gitignore文件中有任何目录/条目,那么这样做将永久删除您的文件*

在git版本2.8.1上:以下对我有用。

将已修改和未跟踪的文件保存在不带名称的存储中

git stash save -u

使用名称将已修改和未跟踪的文件保存在存储库中

git stash save -u <name_of_stash>

您可以稍后使用pop或apply,如下所示。

git stash pop

git stash apply stash@{0}

我可以通过以下方式来隐藏未跟踪的文件:

git stash save "tracked files I'm working on"
git stash save -u "untracked files I'm trying to stash"
git stash pop stash@{1}

最后一个弹出隐藏的跟踪文件,从而只留下未跟踪的文件。