Answers:
更新2:
我不确定为什么人们会抱怨这个答案,似乎与我合作得很好,对于未处理的文件,您可以添加-u
标记
完整的命令变为 git stash --keep-index -u
这是git-stash
帮助中的摘录
如果使用--keep-index选项,则已添加到索引的所有更改均保持不变。
如果使用了--include-untracked选项,则所有未跟踪的文件也会被存放,然后使用git clean进行清理,从而使工作目录处于非常干净的状态。如果改用--all选项,则除了未跟踪的文件外,还将隐藏和清除被忽略的文件。
这是它的外观的一个gif:
更新:
我今天(2020年1月31日)针对git版本再次测试了我的答案2.24.0
,但我仍然认为这是正确的,我在上面添加了有关未跟踪文件的小注释。如果您认为它不起作用,请同时提及您的git版本。
旧答案:
如果使用该--keep-index
选项,则已添加到索引的所有更改均保持不变:
git stash --keep-index
从以下文档中git-stash
:
测试部分提交
您可以
git stash save --keep-index
在想要从工作树中的更改中进行两次或更多次提交,并且想要在提交之前测试每个更改时使用:# ... hack hack hack ... $ git add --patch foo # add just first part to the index $ git stash save --keep-index # save all other changes to the stash $ edit/build/test first part $ git commit -m 'First part' # commit fully tested change $ git stash pop # prepare to work on all other changes # ... repeat above five steps until one commit remains ... $ edit/build/test remaining parts $ git commit foo -m 'Remaining parts'
但是,如果您只想直观地检查已分阶段的更改,则可以尝试difftool
:
git difftool --cached
git stash [-p|--patch]
感觉像是交互式隐藏。从man git stash
“使用--patch,您可以从HEAD和要隐藏的工作树之间的差异中交互地选择块”。
add -p
,checkout -p
并且reset -p
从未尝试过stash -p
,谢谢您的提示:D
正如一些人指出的那样,被接受的答案还会带来阶段性的变化。这是一种方法,无需在存储中分阶段进行更改。
这个想法是对暂存的更改进行临时提交,然后存储未暂存的更改,然后取消提交临时提交:
# temp commit of your staged changes:
$ git commit --message "WIP"
# -u option so you also stash untracked files
$ git stash -u
# now un-commit your WIP commit:
$ git reset --soft HEAD^
此时,您将拥有未分阶段的更改的存储,并且只会在工作副本中显示已分阶段的更改。
--keep-index
当前接受的答案选项仍然藏匿有什么索引,它只是还保持它的指标。因此,它被复制了,随之而来的是欢闹。
git add .
可能需要改进此步骤,git add --all
因为它也应该在当前工作目录上方的目录中抓取文件。
我发现标记的答案对我不起作用,因为我需要的东西只能真正隐藏我未分阶段的更改。标记为的答案会存储git stash --keep-index
已分阶段和未分阶段的更改。该--keep-index
部分也只将索引完整保留在工作副本上。这对OP有效,但这只是因为他提出的问题与他实际想要的答案略有不同。
我发现存储未分段的更改的唯一真实方法是完全不使用存储:
git diff > unstaged.diff
git apply -R unstaged.diff
git checkout -- .
也可以代替apply -R
。
工作工作工作...
git apply unstaged.diff
rm unstaged.diff
git version 2.6.1.windows.1
,按说明git stash -k
工作。
Git:隐藏未分级的更改
这将存储您没有git添加的所有修改:
git stash -k
请注意,除非您也使用该-u
开关,否则新创建(和未添加)的文件将保留在您的工作目录中。
git stash -k -u
另外,当您稍后使用git stash pop时,您的工作目录必须是干净的(即,需要添加所有更改)。
http://makandracards.com/makandra/853-git-stash-unstaged-changes
git stash --keep-index
。暂存文件包含在隐藏文件中。
-k
可选)或使用起来很麻烦。