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

git stash save -- just_my_file.txt

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


当前回答

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

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

其他回答

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

git checkout -- <file>

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

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

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

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

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

$ git stash -- filename.ext

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

但是,如果您确实希望指定消息,请使用push。

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

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

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

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

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

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

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

继续做你想做的事情,然后简单地重新创建和/或合并tmpbranch。当你需要做比隐藏所允许的更仔细的跟踪时,这真的不是太多额外的工作。