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

我改变了一个文件,加上一个新文件,并希望使用git存储将它们放在一边,而我切换到另一个任务。 但是,git自己存储只存储对现有文件的更改; 新的文件仍然在我的工作树,混乱了我未来的工作。 我如何隐藏这个未跟踪的文件?

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

添加( git add )文件并开始跟踪它。 然后藏起来。 由于文件的全部内容都是新的,所以它们将被隐藏,并且可以根据需要操作它。

从版本1.7.7开始,你可以使用git stash save -u来存储未跟踪的文件,而不用登台。

从git 1.7.7开始, git stash接受--include-untracked选项(或者short-hand -u )。 要在您的存储中包含未跟踪的文件,请使用以下任一命令:

 git stash --include-untracked git stash -u 

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

将文件添加到索引:

 git add path/to/untracked-file git stash 

索引的全部内容,以及对现有文件的任何未分离的更改都将使其成为存储。

在git bash中,通过使用该命令可以隐藏未跟踪的文件

 git stash --include-untracked 

要么

 git stash -u 

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

git存储从您的工作区中删除任何untracked或uncommited文件。 你可以通过使用下面的命令恢复Git存储

 git stash pop 

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

我的经验

我必须对我的gitIgnore文件进行修改,以避免.classpath和.project文件移动到远程仓库。 截至目前,我不允许将这个修改后的.gitIgnore移到远程仓库。

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

我首先有select地添加了我剩余的文件,并承诺分期。 然而,最后的推动不能被执行,除非修改.gitIgnore fiels和未跟踪的文件即, .project和.classpath不会被隐藏。

我用了

  git stash 

用于存储修改的.gitIgnore文件。

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

 git stash --include-untracked 

并从我的工作区中删除文件。 没有这些文件会消除我在日食中工作位置的能力。 我继续完成将提交的文件推送到远程的过程。 一旦这个成功完成,我用了

 git stash pop 

这粘贴相同的文件回到我的工作区。 这让我回到了我在eclipse中处理同一个项目的能力。 希望这个撇开错误的观念。

正如其他地方所说,答案是git add文件。 例如:

 git add path/to/untracked-file git stash 

然而,这个问题也在另一个答案中提出:如果你不想真的要添加文件? 那么,据我所知,你必须。 而以下将无法正常工作:

 git add -N path/to/untracked/file # note: -N is short for --intent-to-add git stash 

这将失败,如下所示:

 path/to/untracked-file: not added yet fatal: git-write-tree: error building trees Cannot save the current index state 

所以,你可以做什么? 那么,你必须真正地添加文件, 但是 ,你可以在以后有效的取消它,使用git rm --cached

 git add path/to/untracked-file git stash save "don't forget to un-add path/to/untracked-file" # stash w/reminder # do some other work git stash list # shows: # stash@{0}: On master: don't forget to un-add path/to/untracked-file git stash pop # or apply instead of pop, to keep the stash available git rm --cached path/to/untracked-file 

然后你可以继续工作,与git add之前处于相同的状态(即使用未跟踪的文件,称为path/to/untracked-file ;以及可能需要跟踪文件的其他更改)。

工作stream的另一种可能性就是这样的:

 git ls-files -o > files-to-untrack git add `cat files-to-untrack` # note: files-to-untrack will be listed, itself! git stash # do some work git stash pop git rm --cached `cat files-to-untrack` rm files-to-untrack 

…也可以很容易地脚本 – 即使别名会做(以zsh语法呈现;根据需要进行调整)[另外,我缩短了文件名,所以这一切都适合在屏幕上,而不需要滚动这个答案; 随意replace您select的备用文件名]:

 alias stashall='git ls-files -o > .gftu; git add `cat .gftu`; git stash' alias unstashall='git stash pop; git rm --cached `cat .gftu`; rm .gftu' 

请注意,后者可能会更好,作为一个shell脚本或函数,允许参数提供给git stash ,如果你不想popapply ,和/或希望能够指定一个特定的藏匿,而不是只是拿第一名。 也许这(而不是第二个别名,上面)[空白剥离适合没有滚动; 重新添加以增加可读性]:

 function unstashall(){git stash "${@:-pop}";git rm --cached `cat .gftu`;rm .gftu} 

注意 :在这种forms下,如果您要提供存储标识符,则需要提供操作参数以及标识符,例如unstashall apply stash@{1}unstashall pop stash@{1}

当然,你将放在你的.zshrc或者相当于长期存在。

希望这个答案对某人有所帮助,把所有的东西放在一起。

我能够通过这样做来隐藏未跟踪的文件:

 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} 

最后一个popup被跟踪文件的存储,因此只留下未跟踪的文件。

这里有几个正确的答案,但我想指出,对于新的整个目录, 'git add path'将不起作用。 所以,如果你在untrackedpath中有一堆新的文件,并执行此操作:

 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 

如果未跟踪path是你存储的唯一path,那么存储“临时存储”将是一个空的存储。 正确的方法是添加整个path,而不仅仅是目录名称(即用'/'结束path):

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

我认为这可以通过告诉git文件存在,而不是提交到临时区域的所有内容,然后调用git stash 。 Araqnid 描述了如何做前者。

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

要么

 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 

我曾经思考和渴望相同的function。 但是随着时间的推移,我发现它确实是不需要的。 当你藏起来的时候,可以保留新的文件。 没有什么“坏”可以发生在他们身上(当你看看别的东西时,git会报错,不会覆盖现有的未跟踪文件)

而且由于通常情况下, git stashgit stash pop之间的时间范围相当小,您将需要再次快速地处理未跟踪的文件。 所以我想说的是,当你正在做其他事情(在git stashgit stash pop之间)时,显示在git status中的文件的不便之git stash pop是小于由工作引起的不便和所需的注意力,否则将花费尝试添加未跟踪的文件到你的藏匿处。