我希望能够仅存储单个文件的更改:
git stash save -- just_my_file.txt
然而上述方法并不奏效。有其他替代方案吗?
如果您不想为隐藏的更改指定消息,请在双破折号后传递文件名。
$ git stash -- filename.ext
如果这是一个未跟踪/新文件,你需要先将其加入暂存区(stage)。git stash push -m "describe changes to filename.ext" filename.ext
这两种方法在git 2.13+版本中均可使用。
`git stash -- filename.ext`,
`git commit --amend`,
`git stash pop`
- Brandon Dewey2.24.3 (Apple Git-128)
。 - Trevor$ git stash -m "message" -- filename.ext
也可以使用(git v2.31.1)。 - Niklas我认为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 checkout tmpbranch the_file
混合使用,使得将单个文件更改拉回主分支变得非常有用。请参见https://dev59.com/S3VC5IYBdhLWcg3wZwNT#307872。 - Matthew Davis$
)。两者都经常使用,尽管有时 $
暗示普通用户,而 #
暗示 root/admin。 - Wes Hardakergit stash -p
交互式地保存单行代码(类似于 git add -p
)。git 2.14.1
开始,你可以使用命令 git stash -p <文件名>
来指定特定的文件名进行存储。不清楚具体是何时发生了这个变化。 - muongit stash -p
(以及git add -p
)会跳过新文件。 - B Sevengit stash -p <filename>
对我不起作用。相反,git stash -- <filename>
起了作用。 - alelom最好的选项是将除此文件以外的所有内容进行暂存,并使用git stash save --keep-index
命令来保留索引,从而暂存您的未暂存文件:
$ git add .
$ git reset thefiletostash
$ git stash save --keep-index
正如Dan指出的那样,thefiletostash
是唯一会被存储的文件,但它也会将其他文件存储,所以它并不完全符合您的要求。
git stash pop
,那么它不仅会应用我们想要暂存的文件,还会应用所有的文件。 - Dan Moulding如果你在使用'git stash'时实际上是想要"放弃更改"(discard changes),而不是暂存它们,那么可以使用以下命令:
git stash save --keep-index
git checkout -- <file>
请注意,git stash只是分支和操作的快速简单替代方法。
git stash
命令可以快速丢弃更改。事实上,我谷歌搜索了这篇文章的确切标题,但不知道我在错误地搜索。看起来有多个人也遇到了类似的情况,并发现我的答案很有用。把我的答案看作是一个提示,就像“你是否想要X”。即使我现在更加了解git-stash,8年后,我仍然坚持在此页面上添加此提示的观点。 - Devesh
cp just_my_file.txt just_my_file.txt.manualstash
,现在您可以执行所有检出操作等等,由于该副本是“未跟踪的文件”,因此您可以在分支和提交之间移动而不会遇到任何问题。当您在正确的分支/提交上想要“合并单个文件”时,只需执行mv just_my_file.txt.manualstash just_my_file.txt
,现在您可以查看更改并在必要时提交它。 - Dimitry Kgit clean -f -d
命令,因为它会删除未被跟踪的文件。 :-) - Danijel