我对一个文件进行了更改,再加上一个新文件,我想在切换到另一个任务时使用git stash将它们保存起来。但是git stash本身只存储对现有文件的更改;新文件仍保留在我的工作树中,打乱了我未来的工作。我如何保存这个未跟踪的文件?
当前回答
2020年更新答案
我很惊讶,这个页面上没有其他答案提到git stash push。
这篇文章帮助我理解了:
命令gitstash是gitstashpush的简写。在此模式下,不允许使用非选项参数来防止拼写错误的子命令生成不需要的隐藏项。这个命令git stash save还有另一个别名,它已被弃用,取而代之的是git stass push。默认情况下,git在执行隐藏时忽略未跟踪的文件。如果需要将这些文件添加到stash中,可以使用-u选项,告诉git包括未跟踪的文件。如果指定了-a选项,也可以添加忽略的文件-a将包括未跟踪和忽略的文件。
我关心命名我的存储,我希望它们包含未跟踪的文件,所以我最常用的命令是:git stash push-u-m“whatIWantToNameThisStash”
其他回答
我过去常常思考和渴望相同的特征。但随着时间的推移,我发现它确实不需要。当你藏起来时,留下新文件是可以的。它们不会发生任何“坏”情况(当您签出其他文件时,git将出错,不会覆盖现有的未跟踪文件)
而且,由于git stash和git stashpop之间的时间间隔通常很短,因此您将再次需要未跟踪的文件。所以我想说,当你在做其他事情时(在git stash和git stashpop之间),文件以git状态显示所带来的不便要比工作带来的不便小得多,而且需要注意的是,否则尝试将未跟踪的文件添加到你的stash中所需的费用。
我在对新创建的文件使用Sourcetree时遇到了类似的问题(它们也不会包含在存储库中)。
当我第一次选择“stage all”,然后将新添加的组件隐藏在跟踪的位置,因此包含在隐藏中。
在gitbash中,通过使用命令实现未跟踪文件的隐藏
git stash --include-untracked
# or
git stash -u
http://git-scm.com/docs/git-stash
gitstash从工作区中删除任何未跟踪或未提交的文件。您可以使用以下命令恢复git存储
git stash pop
这将把文件放回本地工作区。
我的经历
我不得不对gitIgnore文件进行修改,以避免.classpath和.project文件移动到远程存储库中。到目前为止,我不能在远程回购中移动这个修改过的.gitIgnore。
.classpath和.project文件对于eclipse很重要,eclipse是我的java编辑器。
首先,我有选择地添加了其余的文件,并提交了暂存。但是,除非修改的.gitIgnore字段和未跟踪的文件(即.project和.classpath)未被隐藏,否则无法执行最终推送。
我用过
git stash
用于隐藏已修改的.gitIgnore文件。
对于存放.classpath和.project文件,我使用
git stash --include-untracked
它从我的工作区删除了这些文件。缺少这些文件会影响我在eclipse中处理工作位置的能力。我继续完成将提交的文件推送到远程的过程。成功完成后,我使用
git stash pop
这将相同的文件粘贴回我的工作区。这给了我在eclipse中处理同一项目的能力。希望这能消除误解。
这里有几个正确的答案,但我想指出,对于新的整个目录,“git-add-path”将不起作用。因此,如果您在未跟踪的路径中有一堆新文件,请执行以下操作:
git add untracked-path
git stash "temp stash"
这将隐藏以下消息:
Saved working directory and index state On master: temp stash
warning: unable to rmdir untracked-path: Directory not empty
如果未追踪的路径是你隐藏的唯一路径,那么“临时隐藏”将是一个空的隐藏。正确的方法是添加整个路径,而不仅仅是目录名(即以“/”结束路径):
git add untracked-path/
git stash "temp stash"
在git版本2.8.1上:以下对我有用。
将已修改和未跟踪的文件保存在不带名称的存储中
git stash save -u
使用名称将已修改和未跟踪的文件保存在存储库中
git stash save -u <name_of_stash>
您可以稍后使用pop或apply,如下所示。
git stash pop
git stash apply stash@{0}
推荐文章
- Git与Mercurial仓库的互操作性
- 忽略git中修改(但未提交)的文件?
- “git restore”命令是什么?“git restore”和“git reset”之间有什么区别?
- Git合并与强制覆盖
- Git拉另一个分支
- 在Bash命令提示符上添加git分支
- 如何更改Git日志日期格式
- git pull -rebase和git pull -ff-only之间的区别
- GitHub -致命:无法读取用户名https://github.com':没有这样的文件或目录
- 撤消git平分错误
- 使用.gitconfig配置diff工具
- 如何配置Mac OS X术语,使git有颜色?
- Visual Studio Code: .git文件夹/文件隐藏
- “node_modules”文件夹应该包含在git存储库中吗
- 为什么git-rebase给了我合并冲突,而我所做的只是压缩提交?