我如何保存一个特定的文件,而不保存当前修改的其他文件?

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

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

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

当前回答

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

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

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


警告正如评论中所指出的,git stash--keep索引将所有内容都推到存储中,包括暂存和未暂存。--keep索引只是在存储完成后保留索引。这可能会在以后弹出存储时导致合并冲突。

其他回答

@斯维克发布了一个很棒的答案。我想把我所有的.java文件都藏起来,让build.gradle保持不变,所以我跑了:

git stash push *.java

git状态(确保您的更改可以隐藏)

src/config/bl.go

src/config/dl.go

如果你只想隐藏dl.go

git stash push-m“<enter your msg eg:dl files reted>”src/config/dl.go

显示隐藏列表

git隐藏列表

然后签出你的分行并申请存款

git存储应用存储{0}

在vs代码的源代码控制选项卡中,按住shift键,然后选择要隐藏的文件,然后右键单击并选择隐藏更改选项。

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

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

旧答案:

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

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

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

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

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


警告正如评论中所指出的,git stash--keep索引将所有内容都推到存储中,包括暂存和未暂存。--keep索引只是在存储完成后保留索引。这可能会在以后弹出存储时导致合并冲突。