仅存储一个文件


173

我希望能够仅存储单个文件中的更改:

git stash save -- just_my_file.txt

上面的虽然不起作用。还有其他选择吗?


10

对于单个文件,而不是摆弄存储命令,简单得多的方法是复制单个文件,并且当您想将其恢复时只需简单地复制原始文件即可。例如。cp just_my_file.txt just_my_file.txt.manualstash 现在,您可以执行所有签出和操作,并且由于副本是“未跟踪的文件”,因此您可以跨分支移动并提交,没有任何问题。当您在正确的分支/提交上,想要“合并单个文件”时,只需执行操作即可mv just_my_file.txt.manualstash just_my_file.txt,现在您可以查看更改并在必要时提交它
Dimitry K 2016年

Answers:


172

我认为stash -p这可能是您想要的选择,但是以防万一您将来遇到其他甚至更棘手的事情,请记住:

Stash 实际上只是一个非常简单的替代方案,只是稍微复杂一点 branch集合。藏匿对于快速移动事物非常有用,但是您可以使用分支来完成更复杂的事情,而无需付出更多的头痛和工作。

# git checkout -b tmpbranch
# git add the_file
# git commit -m "stashing the_file"
# git checkout master

去做你想做的事,然后再简单地rebase和/或merge转瞬即逝。当您需要进行比存储所允许的更多的仔细跟踪时,实际上并不需要那么多的工作。


2
从好的方面来说,您可以将藏起来变成真正的树枝而不会带来很大的痛苦。
Wes Hardaker 2013年

86

如果不想使用隐藏的更改指定消息,请在双破折号后传递文件名。

$ git stash -- filename.ext

如果是未跟踪/新文件,则必须先上载它。

但是,如果您确实想指定一条消息,请使用push

git stash push -m "describe changes to filename.ext" filename.ext

两种方法均适用于git版本2.13+


1
这个答案似乎是最直接的,我当制作修改变化: git stash -- filename.extgit commit --amendgit stash pop
布兰登杜威

1
我认为这必须依靠一些非常新的功能。它在git 2.1.4中不起作用。
理查德·史密斯

对于我来说,这会导致一些奇怪的行为,即保存了存储,但是同时将相同的文件添加到了暂存中(git v2.20.1),
paradroid

58

您可以使用git stash -p(类似于)以交互方式隐藏单行git add -p

它不需要文件名,但是您可以跳过其他文件,d直到到达要存放的文件,并使用存放所有更改a


3
如果您不想隐藏很多文件,这将花费很长时间。
jjj

23
我不知道什么时候改变了,但是截至git 2.14.1您可以指定文件名git stash -p <filename>
muon

21

最好的选择是git stash save --keep-index暂存除此文件以外的所有文件,并告诉stash使用保留索引,从而存放未暂存的文件:

$ git add .
$ git reset thefiletostash
$ git stash save --keep-index

正如Dan所指出的那样,thefiletostash它是唯一可以通过存储重置的文件,但是它也可以存储其他文件,因此这并不是您想要的。


2
尽管这可以使索引保持相同的状态,但这是否也隐藏了索引中的文件?换句话说,如果在执行此操作后将索引提交到当前分支,然后切换到另一个分支并执行git stash pop,这是否将应用所有文件,而不仅仅是应用我们要存储的一个文件?
Dan Moulding 2012年

@DanMoulding:你是完全正确的,我还没有考虑过。
CharlesB 2012年

16

以防万一您每次使用“ git stash”时都实际上意味着“丢弃更改”(并且不要真正使用git stash临时存储它),在这种情况下,您可以使用

git checkout -- <file>

请注意,git stash只是分支和完成工作的一种更快,更简单的选择。


我想这是最好的答案,如果您想将所有修改后的更改删除到一个文件中。
Mohamed Haseel '16

我想这是完成特定任务的最佳答案
Zakir hussain

6
问题很明确,没有问如何将更改恢复到一个文件。不赞成投票。
理查德·史密斯

这是一个很好的答案,可以清楚地显示出来。但是有些人会固执地使用下投票作为滥用特征:+1
Mukul Jain

@MukulJain我实际上需要以非常临时的方式使用每个文件的存储(对于一个文件,基本上将影响同一行的两个提交中的某些更改分开)。我实际上不会投票,只是说这对我没用。
Paul Stelian
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.