我有几个已编辑的文件,如下所示,还有一些新创建的文件
现在我要隐藏未跟踪的文件(在这种情况下,它是db/migrate/20161212071336_add_paranoid_fields.rb
,但不会存储已更改的文件。)
我该怎么做?
我首先创建了这个文件,然后我意识到我不需要立即(需要删除它才能使我的程序正常工作);但我将来可能会需要它。
stash -p
,但这只会隐藏跟踪的文件。答案 0 :(得分:4)
如果您只有这个未跟踪的文件,您可以这样做:
git add -u
git stash --include-untracked --keep-index
这样只会将未跟踪的文件添加到存储中,并将其从工作目录中删除。
如果你有几个未处理的文件并且你想要将这个文件只包含在存储中,那么你将不得不进行提交,然后隐藏单个文件然后重置
git add -u
git commit -m "temp commit"
git add my_file_to_stash
git stash
git reset --hard HEAD^
这里的细微之处在于,当您稍后恢复存储时,该文件将被添加到索引中。这可能是件好事,因为它会提醒你这个文件很重要。
答案 1 :(得分:2)
关闭其他答案中提供的信息,我创建了一个脚本git-stash-selection
,我使用别名gsts
:
#!/bin/sh
#
# Git stash only a selection of files, with a message.
#
# Usage:
# git-stash-selection [<message>] [<paths>...]
message=$1
shift
stash_paths="$*"
git add --all
git reset $stash_paths
git commit --allow-empty -m "temp - excluded from stash"
git add --all
git stash save $message
git reset --soft HEAD^
git reset
我提供了full details in another answer使用的方法以及为什么许多更简单的命令无法正常工作。
编辑:可以使用this patch method而不是提交来改进。或者也许使用另一个藏匿
答案 2 :(得分:1)
stash不提供此功能。您想要实现的目标是将此文件作为其他开发的一部分,最好将其保存在分支中。
步骤:
命令:
git stash
git checkout -b paranoid_fields
git add db/migrate/20161212071336_add_paranoid_fields.rb
git commit
git checkout master
git stash pop
如果要恢复文件:
git merge paranoid_fields
会退还。
如果您想查看该文件:
git show paranoid_fields:db/migrate/20161212071336_add_paranoid_fields.rb
答案 3 :(得分:0)
类似于@ rodrigo的答案,但没有提交和重置。
您可以git stash
将所有当前修改后的跟踪文件存储在stash@{0}
位置。
然后,您可以git add <filename>
在您未跟踪的文件上隐藏,然后再次git stash
。
正在运行git stash list
会显示现在未跟踪的文件存储在stash@{0}
中,修改后的跟踪文件存储在stash@{1}
中。
现在,您只需git stash pop stash@{1}
从存储中删除已修改的跟踪文件并将其放回工作目录中,它就会将未跟踪的文件保留在stash@{0}
中。
您可以使用git stash show -p stash@{0}
查看文件,并使用git stash apply stash@{0}
或git stash pop stash@{0}
进行恢复。正如@rodrigo指出的那样,未跟踪的文件将再次恢复到临时区域。
答案 4 :(得分:0)
在git版本2.21.0(Windows MingW64)中
您可以这样做:
git stash push --include-untracked -- db/migrate/20161212071336_add_paranoid_fields.rb
隐藏文件中仅包含指定的文件。您可以提供多个文件(未跟踪和跟踪的),并且您指定的内容将作为存储区并按正常方式检出,其他文件保持原样。