git - 执行“git stash push -all”后如何从存储条目中恢复文件?
问题描述
我进行了本地更改,其中包括一些新文件和一些文件更改。我的目标是存储新文件和更改,然后更新主分支,最后恢复所有更改以提交它们。
为此,我认为我可以使用“git stash push -all”。这样做并更新主分支后,我想恢复文件/文件更改。因此,我继续使用“git stash pop”,这导致两个未跟踪的文件被恢复,但到目前为止还不是全部。究竟出了什么问题?
我了解到“-all”意味着即使是未跟踪的文件也会被隐藏。我认为这意味着通常应该被 git 忽略的文件(gitignore 文件)现在也在存储中,对吗?
在使混乱变得更糟之前,我怎样才能正确恢复一切?我是 git 新手。
提前致谢
解决方案
正如您所发现的,--all
标志(注意这里的两个破折号)表示所有文件,包括未跟踪和忽略的文件。该标志也可以拼写-a
(一个破折号,单独拼写a
)。1 有一个不同的标志,--include-untracked
或-u
,表示所有文件,包括未跟踪的文件,但不包括未跟踪和忽略的文件。2
了解其git stash
工作原理很重要。这比我上次描述的时候变得更漂亮了,因为git stash
现在可以根据路径规范构建受限的存储。尽管如此,如何从“git stash save --all”中恢复还是值得一读的? 存储代码仍然使用我在那里描述的二或三提交机制,并且仍然运行等效于git reset
and git clean
:只是如果您确实提供了路径规范,则所做的提交以及重置和/或清理的文件受到限制.
在您的特定情况下,中断git stash push
可能会给您留下几个存储区和一个部分清理的存储库。随后的额外存储将保存部分清理状态。从 shell 代码重写为 C 代码使得这种零散的行为不太可能发生,但您可能使用的 Git 版本仍然使用 shell 脚本来实现git stash
.
恢复将是找到所有提交的问题,并使用它们来取回文件。
1与大多数 POSIX(Unix 风格)命令一样,“long”选项all
前面有两个破折号,“short”(单字母)选项前面有一个破折号(因此git diff -c
vs git diff --cc
:longcc
选项需要两个破折号;-cc
指定空头c
选项两次,无效)。
2根据 Git 自己的定义,所有被忽略的文件也是未跟踪的文件,但并非所有未跟踪的文件都被忽略。这是因为忽略文件的定义是存在于您的工作树中的文件,但在 Git 的 index 中不存在。跟踪文件的定义是存在于 Git 索引中的文件。如果文件存在于 Git 的索引中,它会被跟踪,因此不会被忽略。如果它未被跟踪,它就不会出现在 Git 的索引中。然后它可以被忽略,但不一定被忽略。
推荐阅读
- php - 比较 2 个用变量填充的 PHP 文件,将缺少的变量从一个添加到另一个
- angular - 如何让这个响应拦截器在 Angular 中工作?
- sql-server - 数据库图中不可用的更改表结构 (localdb)
- java - 在 Eclipse 上无法解析导入 edu
- objective-c - api.whatsapp.com/send:Safari 无法打开页面,因为地址无效
- python - 如何从字典中获取列表的后半部分
- python - 如何动态生成 PyKnow 规则?
- java - 防止http超时
- java - 创建 Spring Boot 应用程序的问题
- html - 如何停止缩小固定 div 的表单?