如何 git 存储特定文件?

可能重复:
如何隐藏多个已更改文件中的仅一个文件

如何隐藏一个特定文件,而将其他当前已修改的文件保存在我要保存的隐藏文件之外?

例如,如果 git status 给我这样的话:

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 2.13 起,有一个命令可将特定的路径保存到存储: git stash push <path> 。例如:

git stash push -m welcome_cart app/views/cart/welcome.thtml

旧答案:

您可以使用git stash --patch (或git stash -p )来完成此操作 - 您将进入交互模式,在该模式下,您将看到每个更改的块。使用n跳过不想隐藏的文件,使用y遇到不想隐藏的文件时使用y ,使用q退出并保留其余的块。 a将显示的块和其他块存储在该文件中。

这不是最人性化的方法,但是如果您确实需要它,它可以完成工作。

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

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

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


警告正如评论中所指出的,这会将所有内容(无论已上演还是未上演)都置于隐藏状态。在隐藏之后,--keep-index 仅保留索引。当您稍后弹出存储时,这可能导致合并冲突。