你也可以使用git stash save -p "my commit message"
。通过这种方式,您可以选择将哪些帅哥添加到藏匿处,也可以选择整个文件。
每个块都会提示您一些操作:
y - stash this hunk
n - do not stash this hunk
q - quit; do not stash this hunk or any of the remaining ones
a - stash this hunk and all later hunks in the file
d - do not stash this hunk or any of the later hunks in the file
g - select a hunk to go to
/ - search for a hunk matching the given regex
j - leave this hunk undecided, see next undecided hunk
J - leave this hunk undecided, see next hunk
k - leave this hunk undecided, see previous undecided hunk
K - leave this hunk undecided, see previous hunk
s - split the current hunk into smaller hunks
e - manually edit the current hunk
? - print help
警告
正如评论中所指出的,这会将所有内容都放入存储中,无论是分阶段还是非分阶段。 -step-index 只在保存完成后单独留下索引。以后弹出存储时,这可能会导致合并冲突。
这将隐藏您之前未添加的所有内容。只需git add
你想要保留的东西,然后运行它。
git stash --keep-index
例如,如果要将旧提交拆分为多个变更集,则可以使用此过程:
git rebase -i <last good commit>
edit
。 git reset HEAD^
git add <files you want to keep in this change>
git stash --keep-index
git add
任何更改。 git commit
git stash pop
git rebase --continue
由于 git 基本上是关于管理所有存储库内容和索引(而不是一个或多个文件),因此git stash
交易毫不奇怪, 与所有工作目录 。
实际上,自 Git 2.13(2017 年第 2 季度)以来,您可以存储单个文件,包括:
git stash push [--] [<pathspec>...]
有关更多信息,请参阅 “存储对特定文件的更改 ”。
原始答案(下面,2010 年 6 月)是关于手动选择您想藏匿的内容。
Casebash评论:
这个(
stash --patch
原始解决方案)很不错,但我经常修改了很多文件所以使用补丁很烦人
bukzor的回答 (upvoted,2011 年 11 月)提出了一个更实际的解决方案,基于
git add
+ git stash --keep-index
。
去看看并提出他的答案,这应该是官方的(而不是我的)。
关于该选项, chhh在评论中指出了另一种工作流程:
你应该在这样的藏匿之后 “
git reset --soft
” 来恢复你的明确阶段:
为了达到原始状态 - 这是一个明确的暂存区域,并且只有一些选择的非阶段性修改,可以轻轻地重置索引以获取(不提交像你这样的东西 - bukzor - 确实)。
(原始答案 2010 年 6 月:手动藏匿)
然而, git stash save --patch
可以让你实现你所追求的部分git stash save --patch
:
使用
--patch
,您可以交互式地从 HEAD 和工作树之间的差异中选择要存储的数据。
构建存储条目,使其索引状态与存储库的索引状态相同,并且其工作树仅包含您以交互方式选择的更改。然后,从您的工作树中回滚所选更改。
但是,这将保存完整索引(可能不是您想要的,因为它可能包括已编入索引的其他文件),以及部分工作树(可能看起来像您要隐藏的那个)。
git stash --patch --no-keep-index
可能更适合。
如果--patch
不起作用,手动过程可能会:
对于一个或多个文件,中间解决方案是:
git stash
git stash
#这次,只有你想要的文件被藏起来了git stash pop stash@{1}
#重新应用所有文件修改git checkout -- afile
#在任何本地修改之前将文件重置为 HEAD 内容在相当繁琐的过程结束时,您将只有一个或几个文件被藏起来。