如何git隐藏特定文件?

我如何隐藏一个特定的文件,而将当前修改的其他文件从我将要保存的存储中删除?

例如,如果git状态给我这个:

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")

我只想隐藏应用程序/视图/购物车/welcome.thtml,我该怎么做?类似(但当然这不起作用):

git stash save welcome_cart app/views/cart/welcome.thtml
1016969 次浏览

编辑:从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将隐藏显示的块和该文件中的其余块。

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

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

git add app/controllers/cart_controller.phpgit stash --keep-indexgit reset

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


警告正如评论中所述,git stash --keep-index将所有内容推送到存储中,包括暂存和未暂存。--keep-index只是在存储完成后单独留下索引。当您稍后弹出存储时,这可能会导致合并冲突。

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

git stash push [paths you wish to stash]

因此,例如,如果我只想将更改隐藏在src/目录中,我可以运行

git stash push src/

如果您可以使用GIT GUI客户端,从2020年5月开始,叉子可以非常无缝地做到这一点。部分藏匿功能的GIF将比任何单词更好地显示这一点:git-fork中部分存储功能的GIF

请注意,Fork(这对Google来说是一个很难的名字!)不是免费软件,评估期后的费用为50美元,但您可以忽略弹出窗口,就像您对WinRAR或WinZip所做的那样。

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

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

在此处输入图片描述

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

在此处输入图片描述

简单明了的解决方案:

git stash -- finename.ext

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

存储一个文件:

git stash -- filename.txt

存储多个文件:

git stash -- filename1.txt filename2.txt

在vs-code的源代码控制选项卡中,按住Shift键,然后选择要存储的文件,然后右键单击并选择存储更改选项。

  1. 暂存您不想隐藏的更改。
  2. 将剩余的未暂存文件存储为:
$ git stash save <give_it_a_name> --keep-index

现在隐藏了未暂存的文件。查看包含您命名的stash的stash列表:

$ git stash list
stash@{0}: On mybranch: WIP220412-1119amstash@{1}: On mybranch: WIP220312-749am

要恢复隐藏的文件:

$ git stash apply stash@{<index_of_saved_stash>}$ git stash apply stash@{0}

隐藏在WIP220412-1119am中的更改现已恢复。并且stash列表也保持不变,(而不是“git stash pop”,您可以以这种方式保留列表。)

@svick发布了一个很好的答案。我想隐藏我所有的. java文件并保持build.gradle不变,所以我跑了:

git stash push *.java
  • git状态(确保您的更改可以隐藏)

配置bl.go

配置dl.go

如果你只想藏dl.go

  • git stash ush-m"dl file stash(stash msg)"src/config/dl.go

显示您的存储列表

  • git存储列表

然后签出你的分支并应用stash

  • git stash应用stash{0}