协慌网

登录 贡献 社区

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

可能重复:
如何从已更改的多个文件中仅存储一个文件

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

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

答案

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

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

老答案:

你可以使用git stash --patch (或git stash -p )来做到这一点 - 你将进入交互模式,在那里你将看到每个被更改的大块。使用n跳过你不想藏匿,文件y当你遇到要藏匿的一个,并且q退出并离开 unstashed 剩余的帅哥。 a将隐藏显示的大块和其余的帅哥放在该文件中。

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

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

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

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


警告正如评论中所述,这会将所有内容放入存储中,无论是暂存还是非暂存。在保存完成后,--keep-index 只保留索引。以后弹出存储时,这可能会导致合并冲突。