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