我怎样才能存储特定文件?

时间:2011-03-31 21:05:39

标签: git git-stash

  

可能重复:
  How to stash only one file out of multiple files that have changed

如何保存特定文件,将当前修改过的其他文件保存在我即将保存的藏匿处?

例如,如果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

5 个答案:

答案 0 :(得分:1948)

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

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

OLD ANSWER:

您可以使用git stash --patch(或git stash -p)执行此操作 - 您将进入交互模式,在其中您将看到每个已更改的块。当您遇到要隐藏的文件时,使用n跳过您不想藏匿的文件y,然后q退出并留下剩下的朋友。 a会将显示的大块和其余的人隐藏在该文件中。

不是最方便用户的方法,但如果你确实需要,它可以完成工作。

答案 1 :(得分:278)

我通常会添加索引更改,我不想隐藏,然后使用--keep-index选项隐藏。

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

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


警告 正如评论中所指出的,这会将所有内容都放入存储中,无论是分阶段还是非分阶段。在保存完成后,--keep-index只保留索引。当您稍后弹出存储时,这可能会导致合并冲突。

答案 2 :(得分:24)

要添加到svick的答案中,-m选项仅向您的藏身处添加一条消息,并且是完全可选的。因此,命令

git stash push [paths you wish to stash]

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

git stash push src/

答案 3 :(得分:3)

如果您可以使用 GIT GUI 客户端,那么 Fork 可以在 2020 年 5 月之前无缝地执行此操作。部分存储功能的 GIF 将比任何文字都更能说明这一点:GIF of partial stash functionality in git-fork

请注意,Fork(Google 很难取其名!)不是免费软件,评估期过后需要 50 美元,但您可以像使用 WinRAR 或 WinZip 一样忽略弹出窗口。

答案 4 :(得分:2)

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

  1. 转到源代码管理选项卡
  2. 选择要隐藏的文件
  3. 右键单击它,您会看到许多选项。点击Stash Changes
  4. 现在它会要求您添加一些隐藏消息。添加易于理解的消息。

enter image description here enter image description here