只保存一个文件

我希望能够从单个文件中保存更改:

git stash save -- just_my_file.txt

但上述方法并不奏效。替代品吗?

316616 次浏览

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

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

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

你可以用git stash -p(类似于git add -p)交互式地隐藏单行。

它不需要文件名,但你可以用d跳过其他文件,直到你到达你想要存储的文件,并用一个存储所有更改。

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

Stash实际上只是稍微复杂一点的branch集合的一个非常简单的替代品。Stash对于快速移动内容非常有用,但是您可以使用分支完成更复杂的事情,而不需要那么多麻烦和工作。

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

去做你想做的事情,然后简单地rebase和/或merge tmpbranch。当你需要做比stash允许的更仔细的跟踪时,真的没有太多额外的工作。

以防你在使用“git stash”时实际上是指“丢弃更改”(而不是真正使用git stash来暂时隐藏它),在这种情况下,你可以使用

git checkout -- <file>

注意,git stash只是一个快速和简单的替代分支和做一些事情。

如果不想指定带有已存储更改的消息,请在双破折号后传递文件名。

$ git stash -- filename.ext

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

然而,如果你想要指定一个消息,使用push

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

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