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


当前回答

在gitbash中,通过使用命令实现未跟踪文件的隐藏

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

http://git-scm.com/docs/git-stash

gitstash从工作区中删除任何未跟踪或未提交的文件。您可以使用以下命令恢复git存储

git stash pop

这将把文件放回本地工作区。

我的经历

我不得不对gitIgnore文件进行修改,以避免.classpath和.project文件移动到远程存储库中。到目前为止,我不能在远程回购中移动这个修改过的.gitIgnore。

.classpath和.project文件对于eclipse很重要,eclipse是我的java编辑器。

首先,我有选择地添加了其余的文件,并提交了暂存。但是,除非修改的.gitIgnore字段和未跟踪的文件(即.project和.classpath)未被隐藏,否则无法执行最终推送。

我用过

git stash

用于隐藏已修改的.gitIgnore文件。

对于存放.classpath和.project文件,我使用

git stash --include-untracked

它从我的工作区删除了这些文件。缺少这些文件会影响我在eclipse中处理工作位置的能力。我继续完成将提交的文件推送到远程的过程。成功完成后,我使用

git stash pop

这将相同的文件粘贴回我的工作区。这给了我在eclipse中处理同一项目的能力。希望这能消除误解。

其他回答

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

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

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

我在对新创建的文件使用Sourcetree时遇到了类似的问题(它们也不会包含在存储库中)。

当我第一次选择“stage all”,然后将新添加的组件隐藏在跟踪的位置,因此包含在隐藏中。

2.35版中的新增功能

git stash的新的暂存模式使您可以轻松地将暂存区中已有的东西存放起来,而无需其他任何东西。你可以把它想象成gitcommit(它只写阶段性的更改),但它不是创建一个新的commit,而是将一个新条目写到存储中。然后,当你准备好了,你可以恢复你的更改(使用git stash pop)并继续工作。

git add -A
git stash --staged

这里有几个正确的答案,但我想指出,对于新的整个目录,“git-add-path”将不起作用。因此,如果您在未跟踪的路径中有一堆新文件,请执行以下操作:

git add untracked-path
git stash "temp stash"

这将隐藏以下消息:

Saved working directory and index state On master: temp stash
warning: unable to rmdir untracked-path: Directory not empty

如果未追踪的路径是你隐藏的唯一路径,那么“临时隐藏”将是一个空的隐藏。正确的方法是添加整个路径,而不仅仅是目录名(即以“/”结束路径):

git add untracked-path/
git stash "temp stash"

你如何隐藏未追踪的文件?

git stash --include-untracked