我希望能够仅存储单个文件中的更改:
git stash save -- just_my_file.txt
上面的方法虽然不起作用。有什么选择吗?
如果您不想在隐藏的更改中指定消息,请在双破折号后传递文件名。
$ git stash -- filename.ext
如果它是一个未跟踪的/新文件,您必须先暂存它。
但是,如果您确实要指定消息,请使用push
.
git stash push -m "describe changes to filename.ext" filename.ext
这两种方法都适用于 git 版本 2.13+
我认为stash -p
可能是您想要的选择,但以防您将来遇到其他更棘手的事情,请记住:
Stash
实际上只是一个非常简单的替代方案,可以替代仅有的稍微复杂的branch
集合。Stash 对于快速移动事物非常有用,但是您可以使用分支完成更复杂的事情,而不会带来更多的头痛和工作。
# git checkout -b tmpbranch
# git add the_file
# git commit -m "stashing the_file"
# git checkout master
去做你想做的事,然后简单地rebase
和/或merge
tmpbranch。当您需要进行比 stash 允许的更仔细的跟踪时,实际上并没有太多额外的工作。
git stash -p
您可以使用(类似于)交互式地存储单行git add -p
。
它不需要文件名,但你可以跳过其他文件,d直到你到达你想要隐藏的文件,然后用a.
最好的选择是暂存除此文件之外的所有内容,并告诉 stash 将索引保留为git stash save --keep-index
,从而暂存您的未暂存文件:
$ git add .
$ git reset thefiletostash
$ git stash save --keep-index
正如 Dan 指出的那样,thefiletostash
它是唯一一个被存储重置的文件,但它也存储其他文件,所以它不完全是你想要的。
以防万一您在使用“git stash”时实际上是指“放弃更改”(并且不要真正使用 git stash 临时存储它),在这种情况下,您可以使用
git checkout -- <file>
请注意, git stash 只是分支和做事的一种更快速、更简单的替代方法。