我对一个文件进行了更改,再加上一个新文件,我想在切换到另一个任务时使用git stash将它们保存起来。但是git stash本身只存储对现有文件的更改;新文件仍保留在我的工作树中,打乱了我未来的工作。我如何保存这个未跟踪的文件?
当前回答
我认为这可以通过告诉git文件存在来解决,而不是将文件的所有内容提交到暂存区,然后调用git stash。Araqnid描述了如何实现前者。
git add --intent-to-add path/to/untracked-file
or
git update-index --add --cacheinfo 100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 path/to/untracked-file
然而,后者不起作用:
$ git stash
b.rb: not added yet
fatal: git-write-tree: error building trees
Cannot save the current index state
其他回答
这里有几个正确的答案,但我想指出,对于新的整个目录,“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"
如果您想隐藏未跟踪的文件,但保留索引文件(例如,您要提交的文件),只需在-u中添加-k(保留索引)选项
git stash -u -k
从git1.7.7开始,gitstash接受--include未跟踪选项(或短手-u)。要将未跟踪的文件包含在存储库中,请使用以下任一命令:
git stash --include-untracked
# or
git stash -u
警告:如果您的gitignore文件中有任何目录/条目,那么这样做将永久删除您的文件*
我认为这可以通过告诉git文件存在来解决,而不是将文件的所有内容提交到暂存区,然后调用git stash。Araqnid描述了如何实现前者。
git add --intent-to-add path/to/untracked-file
or
git update-index --add --cacheinfo 100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 path/to/untracked-file
然而,后者不起作用:
$ git stash
b.rb: not added yet
fatal: git-write-tree: error building trees
Cannot save the current index state
2.35版中的新增功能
git stash的新的暂存模式使您可以轻松地将暂存区中已有的东西存放起来,而无需其他任何东西。你可以把它想象成gitcommit(它只写阶段性的更改),但它不是创建一个新的commit,而是将一个新条目写到存储中。然后,当你准备好了,你可以恢复你的更改(使用git stash pop)并继续工作。
git add -A
git stash --staged
推荐文章
- 为什么我需要显式地推一个新分支?
- 如何撤消最后的git添加?
- Rubymine:如何让Git忽略Rubymine创建的.idea文件
- Gitignore二进制文件,没有扩展名
- Git隐藏错误:Git隐藏弹出并最终与合并冲突
- 了解Git和GitHub的基础知识
- 没有。Git目录的Git克隆
- Git与Mercurial仓库的互操作性
- 忽略git中修改(但未提交)的文件?
- “git restore”命令是什么?“git restore”和“git reset”之间有什么区别?
- Git合并与强制覆盖
- Git拉另一个分支
- 在Bash命令提示符上添加git分支
- 如何更改Git日志日期格式
- git pull -rebase和git pull -ff-only之间的区别