我怎样才能存储特定文件?

How can I git stash a specific file?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
How to stash only one file out of multiple files that have changed

我如何存储一个特定的文件,而将当前修改过的其他文件从我要保存的存储中删除?

例如,如果git status给了我以下信息:

1
2
3
4
5
6
7
8
9
10
11
12
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,我该怎么做?类似(但这当然不起作用):

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


编辑:由于git 2.13,有一个命令保存到stash:git stash push 的特定路径。例如:

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

老回答:

你可以使用git stash --patchgit stash -p来实现这一点——你将进入交互模式,在这个模式中你将看到每一个被改变的大块。用n跳过你不想保存的文件,当你遇到你想保存的文件时,用y跳过,用q退出,让剩下的大块不被保存。以东十一〔六〕将把所示的匈奴人和其余的匈奴人藏在那个文件里。

不是最容易使用的方法,但如果您真的需要,它可以完成工作。


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

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

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

警告正如评论中所指出的,这将所有东西都放进了藏匿处,无论是阶段性的还是非阶段性的。保存索引只会在隐藏完成后离开索引。当您稍后弹出隐藏时,这可能会导致合并冲突。