可能重复:
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
答案 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 将比任何文字都更能说明这一点:
请注意,Fork(Google 很难取其名!)不是免费软件,评估期过后需要 50 美元,但您可以像使用 WinRAR 或 WinZip 一样忽略弹出窗口。
答案 4 :(得分:2)