Git藏匿uncached:如何摆脱所有unsaged改变?

假设在由git版本化的项目中进行了两组更改。 一套是上演,另一套则不是。

我想通过在这个状态下运行我的项目(提交之前)来重新检查分阶段的更改。 什么是简单的方法来摆脱所有未分离的变化,只离开上演? 所以我需要不加修改的更改从我的项目中消失,但要存储在某处进行进一步的工作。

这听起来很像git stash命令。 但是, git stash将把我的项目远离未分阶段的变化。 我找不到像git stash uncached东西。

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

 git stash --keep-index 

git-stash的文档 :

testing部分提交

你可以使用git stash save --keep-index当你想在工作树中做两个或两个以上的提交时,你需要在提交之前testing每一个改变:

 # ... 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 

被接受的答案也存储了一些已经指出的阶段性变化,而且不会隐藏未被追踪的文件。 这里有一个方法来做到这一点,而不是在隐藏的阶段更改,同时也删除和隐藏未跟踪的文件。

我们的想法是临时提交您的分阶段更改,然后隐藏未分离的更改,然后取消提交临时提交:

 # temp commit of your staged changes: $ git commit -m "WIP" # stage your previously unstaged files before stashing (so you get untracked files): $ git add . $ git stash # now un-commit your WIP commit: $ git reset --soft HEAD^ 

在这一点上,你将拥有一些未分离的变化,只会在你的工作副本中出现你的阶段性变化。

我发现明显的答案对我来说并不奏效,因为我需要一些真正隐藏的东西,只有我未分离的变化。 标记的答案, git stash --keep-indexgit 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:隐藏未分类的更改

这将存储所有你没有git添加的修改:

 git stash -k 

请注意,除非您还使用-u开关,否则新创build(和未添加)的文件将保留在您的工作目录中。

 git stash -k -u 

此外,你的工作目录必须是干净的(即所有更改需要添加),当你藏匿stream行后来。

http://makandracards.com/makandra/853-git-stash-unstaged-changes