How can I git stash a specific file?
Possible Duplicate:
How to stash only one file out of multiple files that have changed
我如何存储一个特定的文件,而将当前修改过的其他文件从我要保存的存储中删除?
例如,如果git status给了我以下信息:
1 2 3 4 5 6 7 8 9 10 11 12
| 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,我该怎么做?类似(但这当然不起作用):
1
| git stash save welcome_cart app/views/cart/welcome.thtml |
- "可能的重复"问题当前的回答不正确,标记为"已接受"。
- 您可以使用git checkout -- filename并将其恢复到原始状态。
- @它确实会还原它,但不会隐藏它。
- RePenguin Brian的评论:是的,对于最新版本的Git,"可能重复"问题的公认答案链接到这个问题。
编辑:由于git 2.13,有一个命令保存到stash:git stash push 的特定路径。例如:
1
| git stash push -m welcome_cart app/views/cart/welcome.thtml |
老回答:
你可以使用git stash --patch或git stash -p来实现这一点——你将进入交互模式,在这个模式中你将看到每一个被改变的大块。用n跳过你不想保存的文件,当你遇到你想保存的文件时,用y跳过,用q退出,让剩下的大块不被保存。以东十一〔六〕将把所示的匈奴人和其余的匈奴人藏在那个文件里。
不是最容易使用的方法,但如果您真的需要,它可以完成工作。
- 唯一似乎没有做的事情是包括对二进制文件的更改。我编辑了一些图形,做了Git-Stash——补丁方法,它们从未被列出。
- 很麻烦,但很管用。我希望有一种快速的方法,只存储阶段性的更改,然后让这些更改在随后出现时进入未经处理的工作树。
- @Jamesjohnston-git stash --keep-index将允许您存储所有未经保存的更改(与您所寻找的相反)。stackoverflow.com/a/8333163/378253
- 如果你说"EDOCX1"〔1〕而不是"EDOCX1"〔2〕,它会把文件的剩余部分存储起来,这会快得多。
- @杰法马phone太好了!另外,d会做相反的事情,也就是说,不要在当前文件中再藏任何大块。实际上,?将显示所有可能的选项。
- @斯威克,当git push -p时它卡住了,没有反应。
- 谢谢!我使用的命令是:git stash save --patch"Stash message",然后我进入交互模式来选择我要存储的块。我也可以使用这个命令:git stash save --patch --no-keep-index"Stash message",当我已经准备好了我想要保存的文件,并且在保存之后不想保存它。
- --patch是用户友好型的!
- @Nicolaswormser git stash --keep-index坏了。阅读关于这个答案的评论。
- @svick如何用新的文件(如new file: test.txt文件)来制作git stash -p。
- 我想用这个但是给藏匿处起个名字。参数的顺序非常敏感,例如,git stash -p save"name"和git stash save"name" -p都不起作用,但最终发现git stash save -p"name"起作用。
- @Zimbix如果你认为你有更好的答案,我认为你应该发布一个问题的答案,这个问题被标记为(stackoverflow.com/questions/3040833/&hellip;)的副本,而不是编辑我的。
- @斯维克对不起,我认为这是重要的信息,昨天没有评论的名声。
- 所以,是的,我已经把这些细节发布在副本的答案中了。简而言之,git stash -p不支持未跟踪的文件。在我对另一个更具体问题的回答中,这个简单的脚本允许您指定要提交的文件,支持跟踪和未跟踪的文件,并且更易于频繁使用。
- 在2.7.4中似乎不起作用
- V2.13中的编辑正是这个问题所需要的。
- 邮件周围没有引号?
我通常会添加一些我不想隐藏的索引更改,然后使用--keep索引选项进行存储。
1 2 3
| git add app/controllers/cart_controller.php
git stash --keep-index
git reset |
最后一步是可选的,但通常您需要它。它从索引中删除更改。
警告正如评论中所指出的,这将所有东西都放进了藏匿处,无论是阶段性的还是非阶段性的。保存索引只会在隐藏完成后离开索引。当您稍后弹出隐藏时,这可能会导致合并冲突。
- 这比公认的答案要好得多,如果您有很多更改,您不想使用--patch选项勉强通过。
- 不,这把所有东西都藏起来了,不管是有舞台的还是没有舞台的。在藏匿完成后,--keep-index只剩下指数了。所以这不是一个有效的答案,阿法特。
- 请参阅我在@rachel's question上的答案,以获得与此相反的解决方案(保存阶段性更改,而不是未经保存的更改)-stackoverflow.com/questions/3040833/&hellip;
- 之后,如果您想在不提交添加的文件的情况下取回所保存的文件,可以运行git stash; git stash pop stash@{1}。
- 警告:注意@raman's点。这并不是它应该做的。这将把相同的变化放在藏身处,并将它们留在工作树中。当你稍后试图打开隐藏,你很可能会得到合并冲突,它们往往是真正的混乱和难以解决。
- @阶段性文件保存在索引中,然后被藏起来。如果您编辑其中一个并尝试取消显示,您经常会遇到编辑冲突。如果您放弃对这些文件所做的更改并取消显示,这些更改将返回-至少这是我上次尝试时发生的事情。