359

我希望能够仅存储单个文件中的更改:

git stash save -- just_my_file.txt

上面的方法虽然不起作用。有什么选择吗?

4

5 回答 5

321

如果您不想在隐藏的更改中指定消息,请在双破折号后传递文件名。

$ git stash -- filename.ext

如果它是一个未跟踪的/新文件,您必须先暂存它。

但是,如果您确实要指定消息,请使用push.

git stash push -m "describe changes to filename.ext" filename.ext

这两种方法都适用于 git 版本 2.13+

于 2019-03-09T03:59:45.490 回答
246

我认为stash -p可能是您想要的选择,但以防您将来遇到其他更棘手的事情,请记住:

Stash实际上只是一个非常简单的替代方案,可以替代仅有的稍微复杂的branch集合。Stash 对于快速移动事物非常有用,但是您可以使用分支完成更复杂的事情,而不会带来更多的头痛和工作。

# git checkout -b tmpbranch
# git add the_file
# git commit -m "stashing the_file"
# git checkout master

去做你想做的事,然后简单地rebase和/或mergetmpbranch。当您需要进行比 stash 允许的更仔细的跟踪时,实际上并没有太多额外的工作

于 2012-09-14T13:15:28.143 回答
64

git stash -p您可以使用(类似于)交互式地存储单行git add -p

它不需要文件名,但你可以跳过其他文件,d直到你到达你想要隐藏的文件,然后用a.

于 2012-09-14T09:25:29.430 回答
26

最好的选择是暂存除此文件之外的所有内容,并告诉 stash 将索引保留为git stash save --keep-index,从而暂存您的未暂存文件:

$ git add .
$ git reset thefiletostash
$ git stash save --keep-index

正如 Dan 指出的那样,thefiletostash它是唯一一个被存储重置的文件,但它也存储其他文件,所以它不完全是你想要的。

于 2012-09-14T08:45:33.717 回答
18

以防万一您在使用“git stash”时实际上是指“放弃更改”(并且不要真正使用 git stash 临时存储它),在这种情况下,您可以使用

git checkout -- <file>

请注意, git stash 只是分支和做事的一种更快速、更简单的替代方法。

于 2014-12-19T12:14:32.267 回答