小编典典

Git stash uncached:如何存放所有未暂存的更改?

all

假设在一个由 git 版本控制的项目中进行了两组更改。一组已上演,另一组未上演。

我想通过在这种状态下运行我的项目(在提交之前)来重新检查分阶段的更改。 什么是一种简单的方法来存放所有未暂存的更改并只保留暂存状态?
因此,我需要将未分阶段的更改从我的项目中消失,但要存储在某个地方以供进一步工作。

这听起来很像git stash命令。但是git stash会将非分阶段和分阶段的更改从我的项目中移开。而且我找不到类似的东西git stash uncached


阅读 66

收藏
2022-07-27

共1个答案

小编典典

更新 2:
我不确定人们为什么抱怨这个答案,它似乎与我完美配合,对于未处理的文件,您可以添加-u标志

完整的命令变为git stash --keep-index -u

这是git-stash帮助中的一个片段

如果使用 –keep-index 选项,则已添加到索引的所有更改都将保持不变。

如果使用 –include-untracked 选项,所有未跟踪的文件也会被隐藏,然后用 git clean
清理,使工作目录处于非常干净的状态。如果改为使用 –all 选项,则除了未跟踪的文件之外,还会隐藏和清理被忽略的文件。

这是它外观的 GIF:

在此处输入图像描述

更新:

~~尽管这是选择的答案,但很多人指出[下面的答案](https://stackoverflow.com/a/34681302/292408)是正确的答案,我建议您检查一下。~~

我今天(31/1/2020)针对 git version
再次测试了我的答案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
2022-07-27