首先,我知道--keep-index
。这不是我想要的,因为它仍然隐藏所有更改,但将暂存的更改留在工作树中。我想只隐藏未分段的文件,如果可能的话,不再使用git stash --patch
添加所有更改。
答案 0 :(得分:2)
如果您想存储索引(已暂存的内容)和工作树(尚未暂存的内容)之间的差异,则只需 git diff
:
# store it :
git diff > stash.patch
# if you additionally want to put the unstaged changes away :
git stash -k
稍后将这些更改应用于工作树(而不是索引):使用 git apply
git apply stash.patch
您还可以使用存储在存储中的内容来重新创建该差异:
# stash the changes :
git stash -k
# to reapply them on the worktree at a later time :
# the 'unstaged changes' are the diff between
# - what the index was (stash^2)
# - and what the worktree was (stash)
git diff stash^2 stash | git apply -
# again : 'git apply' will apply the changes on the *worktree*, not the index
答案 1 :(得分:1)
我能想到的最好方法是:
git commit -n -m temp
git stash push -u
git reset HEAD~1
这将在不触发任何预提交钩子的情况下提交。然后它将隐藏剩余的更改(即之前未暂存的更改)。最后,它会将 head 重置回预提交状态(在“temp”提交之前)。
答案 2 :(得分:0)
您无法做到彻底,但最终甚至可以完全不使用任何git-stash
命令而仅隔离未暂存的更改或仅暂存的更改,或两者都隔离:
git switch -c separated-stashes
相当于旧的checkout -b
:创建一个新分支并打开它。它既不会更改您的工作树也不会更改您的索引,因此您基本上将获得与之前相同的git status
'输出,但是这次是在新分支上。与简单的git switch
/ git checkout
相反,它不会警告您在切换分支之前存储或提交更改,因为您是通过-c
/ {{ 1}}。
-b
在新分支上创建仅包含从头开始的阶段性更改的第一次提交。
git commit -m "staged"
创建第二个提交,并且从一开始就进行无阶段的更改。
git add -u && git commit -m "unstaged"
返回上一个分支。
现在,您已经藏匿了所有东西,可以随时随地git switch - # == git checkout -
{需要进行(暂存/未暂存)的内容。
这看起来有点麻烦,但是您可以自由定义一个git别名来自动化它:
cherry-pick