你如何隐藏未跟踪的文件?
我改变了一个文件,加上一个新文件,并希望使用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是小于由工作引起的不便和所需的注意力,否则将花费尝试添加未跟踪的文件到你的藏匿处。