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


当前回答

我认为这可以通过告诉git文件存在来解决,而不是将文件的所有内容提交到暂存区,然后调用git stash。Araqnid描述了如何实现前者。

git add --intent-to-add path/to/untracked-file

or

git update-index --add --cacheinfo 100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 path/to/untracked-file

然而,后者不起作用:

$ git stash
b.rb: not added yet
fatal: git-write-tree: error building trees
Cannot save the current index state

其他回答

将文件添加到索引:

git add path/to/untracked-file
git stash

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

要隐藏包含未跟踪文件(尤其是.gitignore中的文件)的工作目录,您可能需要使用以下cmd:

git stash --include-untracked

或者,您可以使用缩写-u来代替--include untracked,或者简单地使用git stash--all来存储所有文件,包括未跟踪和忽略的文件。2018年,这个数字发生了变化,所以请确保您的数字是最新的。


警告:似乎存在(或曾经存在)被忽略目录的内容可能被永久删除的情况。有关详细信息,请参阅此存档网站。

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

而且,由于git stash和git stashpop之间的时间间隔通常很短,因此您将再次需要未跟踪的文件。所以我想说,当你在做其他事情时(在git stash和git stashpop之间),文件以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中处理同一项目的能力。希望这能消除误解。

在VS 2019和更高版本中提供Stashing。

转到Git更改窗口Ctrl+Alt+F7现在按下“全部提交”或“提交阶段”按钮附近的下拉键,查看隐藏选项

如果您想隐藏未跟踪的文件,如Git忽略的文件或未包含在项目中的文件,请选择此选项

阅读以下答案,了解Visual studio中Git存储的完整用法:https://stackoverflow.com/a/69905607/4391394