1952

如何存储特定文件,而将当前修改的其他文件留在我要保存的存储中?

例如,如果 git status 给我这个:

younker % gst      
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   app/controllers/cart_controller.php
#   modified:   app/views/cart/welcome.thtml
#
no changes added to commit (use "git add" and/or "git commit -a")

我只想存储 app/views/cart/welcome.thtml,我该怎么做?类似的东西(但当然这不起作用):

git stash save welcome_cart app/views/cart/welcome.thtml
4

8 回答 8

2855

编辑:从 git 2.13 开始,有一个命令可以将特定路径保存到 stash: git stash push <path>。例如:

git stash push -m welcome_cart app/views/cart/welcome.thtml

旧答案:

您可以使用git stash --patch(或git stash -p) 来做到这一点——您将进入交互模式,您将看到每个被更改的块。用于n跳过您不想存储的文件,y当您遇到要存储的文件时,q退出并保留剩余的大块不存储。 a将在该文件中存储显示的大块和其余的大块。

不是最用户友好的方法,但如果你真的需要它,它可以完成工作。

于 2011-03-31T21:19:11.700 回答
359

我通常添加到我不想存储的索引更改中,然后使用--keep-index选项存储。

git add app/controllers/cart_controller.php
git stash --keep-index
git reset

最后一步是可选的,但通常是您想要的。它从索引中删除更改。


警告 如评论中所述,git stash --keep-index将所有内容都推送到存储区,包括分阶段和非分阶段。存储完成后,--keep-index仅保留索引。当您稍后弹出存储时,这可能会导致合并冲突。

于 2012-12-18T20:40:06.420 回答
96

要添加到 svick 的答案,该-m选项只是将一条消息添加到您的存储中,并且完全是可选的。因此,命令

git stash push [paths you wish to stash]

是完全有效的。因此,例如,如果我只想在src/目录中存储更改,我可以运行

git stash push src/
于 2020-09-03T21:35:54.310 回答
24

存放一个文件:

git stash -- filename.txt

存放多个文件:

git stash -- filename1.txt filename2.txt
于 2021-12-01T02:56:57.657 回答
14

如果您使用的是 Visual Studio 代码,则有一种更简单的方法来存储选定的文件。

  1. 确保你已经在 VSCode 中安装了GitLens扩展
  2. 转到源代码管理选项卡
  3. 选择要存储的文件
  4. 右键单击它,您将看到许多选项。单击存储更改

在此处输入图像描述

  1. 现在它会要求您添加一些隐藏消息。添加可理解的消息并按 Enter。

在此处输入图像描述

于 2021-07-14T12:14:41.123 回答
3

简短而简单的解决方案:

git stash -- finename.ext

在你的情况下git stash -- app/views/cart/welcome.thtml

于 2021-10-08T11:52:18.527 回答
2

如果您可以使用 GIT GUI 客户端,那么截至 2020 年 5 月,Fork可以非常无缝地执行此操作。部分存储功能的 GIF 将比任何文字更好地展示这一点:git-fork 中部分存储功能的 GIF

请注意,Fork(这对 Google 来说是个难以理解的名称!)不是免费软件,在评估期后售价 50 美元,但您可以像 WinRAR 或 WinZip 一样忽略弹出窗口。

于 2021-04-23T00:41:31.780 回答
0

在 vs-code 的 Source Control 选项卡中,按住 shift 键,然后选择要存储的文件,然后右键单击并选择 stash changes 选项。

于 2022-02-24T07:59:36.363 回答