假设在一个由 git 版本控制的项目中进行了两组更改。一组已上演,另一组未上演。
我想通过在这种状态下运行我的项目(在提交之前)来重新检查分阶段的更改。 什么是一种简单的方法来存放所有未暂存的更改并只保留暂存状态? 因此,我需要将未分阶段的更改从我的项目中消失,但要存储在某个地方以供进一步工作。
这听起来很像git stash命令。但是git stash会将非分阶段和分阶段的更改从我的项目中移开。而且我找不到类似的东西git stash uncached。
git stash
git stash uncached
更新 2: 我不确定人们为什么抱怨这个答案,它似乎与我完美配合,对于未处理的文件,您可以添加-u标志
-u
完整的命令变为git stash --keep-index -u
git stash --keep-index -u
这是git-stash帮助中的一个片段
git-stash
如果使用 –keep-index 选项,则已添加到索引的所有更改都将保持不变。 如果使用 –include-untracked 选项,所有未跟踪的文件也会被隐藏,然后用 git clean 清理,使工作目录处于非常干净的状态。如果改为使用 –all 选项,则除了未跟踪的文件之外,还会隐藏和清理被忽略的文件。
如果使用 –keep-index 选项,则已添加到索引的所有更改都将保持不变。
如果使用 –include-untracked 选项,所有未跟踪的文件也会被隐藏,然后用 git clean 清理,使工作目录处于非常干净的状态。如果改为使用 –all 选项,则除了未跟踪的文件之外,还会隐藏和清理被忽略的文件。
这是它外观的 GIF:
更新:
~~尽管这是选择的答案,但很多人指出[下面的答案](https://stackoverflow.com/a/34681302/292408)是正确的答案,我建议您检查一下。~~
我今天(31/1/2020)针对 git version 再次测试了我的答案2.24.0,我仍然相信它是正确的,我在上面添加了一个关于未跟踪文件的小注释。如果您认为它不起作用,请同时提及您的 git 版本。
2.24.0
旧答案 : 如果--keep-index使用该选项,则已添加到索引的所有更改都将保持不变:
--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'
当您想从工作树中的更改中进行两次或多次提交时,您可以使用git stash save --keep-index,并且您想在提交之前测试每个更改:
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:
difftool
git difftool --cached