我如何保存一个特定的文件,而不保存当前修改的其他文件?

例如,如果git状态告诉我:

younker % gst      
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   app/controllers/cart_controller.php
#   modified:   app/views/cart/welcome.thtml
#
no changes added to commit (use "git add" and/or "git commit -a")

我只想存储app/views/cart/welcome.thtml,我该怎么做?类似于(但当然这不起作用):

git stash save welcome_cart app/views/cart/welcome.thtml

当前回答

简单快捷的解决方案:

git stash -- finename.ext

在您的情况下,git stash--app/views/cart/welcome.thtml

其他回答

对于隐藏一个文件:

git stash -- filename.txt

对于存储多个文件:

git stash -- filename1.txt filename2.txt

如果您可以使用GIT GUI客户端,那么截至2020年5月,Fork可以非常无缝地做到这一点。部分隐藏功能的GIF将比任何文字更好地显示这一点:

请注意,Fork(这对谷歌来说是一个很难的名字!)不是免费软件,在评估期后需要50美元,但你可以像WinRAR或WinZip那样忽略弹出窗口。

@斯维克发布了一个很棒的答案。我想把我所有的.java文件都藏起来,让build.gradle保持不变,所以我跑了:

git stash push *.java

准备好你不想隐藏的更改。将剩余的未分页文件存放在:

$ git stash save <give_it_a_name> --keep-index

未分页的文件现在被隐藏。查看包含您的指定存储的存储列表:

$ git stash list

stash@{0}: On mybranch: WIP220412-1119am
stash@{1}: On mybranch: WIP220312-749am

要还原隐藏的文件,请执行以下操作:

$ git stash apply stash@{<index_of_saved_stash>}
$ git stash apply stash@{0}

WIP220412-1119am中隐藏的更改现在已恢复。而隐藏列表也保留了下来(而不是“git stash pop”,你可以这样保留列表)

我通常会添加不想隐藏的索引更改,然后使用--keep索引选项隐藏。

git add app/controllers/cart_controller.php
git stash --keep-index
git reset

最后一步是可选的,但通常是您需要的。它会从索引中删除更改。


警告正如评论中所指出的,git stash--keep索引将所有内容都推到存储中,包括暂存和未暂存。--keep索引只是在存储完成后保留索引。这可能会在以后弹出存储时导致合并冲突。