我对一个文件进行了更改,再加上一个新文件,我想在切换到另一个任务时使用git stash将它们保存起来。但是git stash本身只存储对现有文件的更改;新文件仍保留在我的工作树中,打乱了我未来的工作。我如何保存这个未跟踪的文件?
当前回答
从git1.7.7开始,gitstash接受--include未跟踪选项(或短手-u)。要将未跟踪的文件包含在存储库中,请使用以下任一命令:
git stash --include-untracked
# or
git stash -u
警告:如果您的gitignore文件中有任何目录/条目,那么这样做将永久删除您的文件*
其他回答
这里有几个正确的答案,但我想指出,对于新的整个目录,“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"
2.35版中的新增功能
git stash的新的暂存模式使您可以轻松地将暂存区中已有的东西存放起来,而无需其他任何东西。你可以把它想象成gitcommit(它只写阶段性的更改),但它不是创建一个新的commit,而是将一个新条目写到存储中。然后,当你准备好了,你可以恢复你的更改(使用git stash pop)并继续工作。
git add -A
git stash --staged
将文件添加到索引:
git add path/to/untracked-file
git stash
索引的全部内容,加上对现有文件的任何未标记的更改,都将被放入存储库。
我在对新创建的文件使用Sourcetree时遇到了类似的问题(它们也不会包含在存储库中)。
当我第一次选择“stage all”,然后将新添加的组件隐藏在跟踪的位置,因此包含在隐藏中。
我可以通过以下方式来隐藏未跟踪的文件:
git stash save "tracked files I'm working on"
git stash save -u "untracked files I'm trying to stash"
git stash pop stash@{1}
最后一个弹出隐藏的跟踪文件,从而只留下未跟踪的文件。
推荐文章
- Git在不改变提交时间戳的情况下进行改基
- VS 2017 Git本地提交数据库。每次提交时锁定错误
- 如何在过去的一些任意提交之间注入一个提交?
- 从GitHub克隆项目后拉git子模块
- GitHub上的分叉和克隆有什么区别?
- 递归地按模式添加文件
- 我如何使用notepad++(或其他)与msysgit?
- 如何将现有的解决方案从Visual Studio 2013添加到GitHub
- Git存储库中的悬垂提交和blob是什么?它们来自哪里?
- 我如何简单地从我最新的git提交创建一个补丁?
- Git显示“警告:永久添加到已知主机列表”
- 我如何检索一个回购的远程git地址?
- 如何列出提交,因为某些提交?
- 如何在不位于存储库的情况下执行Git命令?
- 为什么git在Windows下记不住我的密码