你如何隐藏未跟踪的文件?
我改变了一个文件,加上一个新文件,并希望使用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
,如果你不想pop
但apply
,和/或希望能够指定一个特定的藏匿,而不是只是拿第一名。 也许这(而不是第二个别名,上面)[空白剥离适合没有滚动; 重新添加以增加可读性]:
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 stash
和git stash pop
之间的时间范围相当小,您将需要再次快速地处理未跟踪的文件。 所以我想说的是,当你正在做其他事情(在git stash
和git stash pop
之间)时,显示在git status
中的文件的不便之git stash pop
是小于由工作引起的不便和所需的注意力,否则将花费尝试添加未跟踪的文件到你的藏匿处。