15

所以我使用隐藏了一些未跟踪的文件

git stash --include-untracked

然后切换到另一个分支。

如果我查看隐藏了哪些更改:

backend/infinispan-rar/pom.xml                     |   12 ++++++++++--
backend/pom.xml                                    |   13 +++++++++++--
backend/test/pom.xml                               |    3 +--
.../main/resources/com/mojiva/testDbContext.xml    |    6 +++---
data/mojiva.xml                                    |    2 +-
dbmigration/pom.xml                                |   16 ++++++++++------
.../main/resources/db/changelogs/issue-17544.xml   |    4 ++--
pom.xml                                            |   11 +++++++++++

然后我尝试使用

git stash pop

得到这个:

backend/activator/effective.pom already exists, no checkout
backend/adverter/src/test/java/com/mojiva/presenter/RequestParamReplacerTest.java already exists, no checkout
backend/dao/.cpath already exists, no checkout
backend/dao/.e0 already exists, no checkout
backend/dao/PutObjectStoreDirHere/defaultStore/Recovery/TransactionStatusManager/#22#/0_ffffc0a86465_cfd2_5016b5cb_1 already exists, no checkout
backend/dao/dep.tree already exists, no checkout
backend/feeds-test/.e0 already exists, no checkout
backend/feeds-test/dep.tree already exists, no checkout
data/wurfl-patch.xml already exists, no checkout
run/linksDB.log already exists, no checkout
run/linksDB.properties already exists, no checkout
run/linksDB.script already exists, no checkout
Could not restore untracked files from stash

请注意,没有一个文件是相同的?

这里发生了什么?

谢谢!

4

4 回答 4

12

从下面提到的关于如何应用使用-a而不是创建的存储的博客中-u

找到 stash 的提交:

git log --graph --all --decorate --oneline

一探究竟

git checkout <sha>

重置父级:

git reset HEAD~1

创建一个干净的存储:

git stash -u

您现在可以结帐master并应用新的存储。

https://blog.tfnico.com/2012/09/git-stash-blooper-could-not-restore.html#

于 2018-02-20T09:56:11.443 回答
5

我今天做了完全相同的事情,但没有找到有用的帮助。所以我做了这个技巧:

  • git checkout stash

这将创建一个临时分支。然后你可以在它上面应用存储。

  • git stash apply

  • 手动将所有更改的文件复制到安全的地方。

  • 忽略临时分支并结帐到原始分支。

  • 将文件粘贴到您最初找到它们的位置。

完毕。

这个问题很老了。但答案可能会帮助像我这样的人。所以...

于 2017-05-09T14:53:20.923 回答
1

Git 2.34 处理导致“无法从存储中恢复未跟踪文件”的另一种情况:

" git stash" ( man ),其中暂定更改涉及将目录更改为文件(反之亦然),令人困惑,已在 Git 2.34(2021 年第四季度)中更正。

请参阅Elijah Newren ( ) 的commit bee8691commit 3d40e37commit 4dbf7f3(2021 年 9 月 10 日(由Junio C Hamano 合并——提交 4a6fd7d中,2021 年 10 月 3 日)newren
gitster

stash: 恢复跟踪的文件后恢复未跟踪的文件

签字人:以利亚·纽伦

如果用户删除一个文件并在其中放置一个未跟踪文件的目录,然后隐藏所有这些更改,则在删除路径中的相应文件之前,无法恢复未跟踪的文件目录。
因此,请在恢复未跟踪文件之前恢复对跟踪文件的更改。

用户删除未跟踪的文件然后在其位置添加已跟踪的文件时,无需担心相应的问题。
Git 不跟踪未跟踪的文件,因此不会知道未跟踪的文件已被删除,因此将无法隐藏该文件的删除。


在 Git 2.35(2022 年第一季度)之前,“ git stash applyman在无法恢复对跟踪文件的更改时忘记尝试恢复未跟踪文件。

请参阅Elijah Newren ( ) 的commit 71cade5(2022 年 1 月 4 日(由Junio C Hamano 合并 -- --提交 6e22345中,2022 年 1 月 10 日)newren
gitster

stash:在恢复未跟踪的文件之前不要返回

报告人:AJ Henderson
测试案例:Randall S. Becker
签字人:Elijah Newren

提交 bee8691(“ stash:在恢复跟踪的文件后恢复未跟踪的文件”,2021-09-10,Git v2.34.0-rc0 --批次 #10中列出的合并)中,我们正确地确定我们应该在尝试之前恢复对跟踪文件的更改恢复未跟踪的文件,并相应地将用于恢复未跟踪文件的代码移到. 不幸的是,中间行有一些早期的返回语句,这意味着我们在某些情况下突然停止恢复未跟踪的文件。do_apply_stash()

甚至在上一次提交之前,当前代码还存在另一个可能的问题——当我们遇到冲突(或其他错误条件)时,本应在恢复存储后运行的 post-stash-apply ' git status' ( man )被跳过),这似乎有点不一致。

通过保存返回状态并让其他功能在返回之前运行来解决这两个问题。

于 2021-10-10T14:31:10.120 回答
-3

您应该忽略日志和其他不是源代码的文件。无论哪种方式,您都可以添加--force以覆盖它们。

您的情况是,您隐藏的文件在弹出时将尝试覆盖您在工作文件夹中已有的文件。如果你在那里有重要的工作,git 会安全地进行,不会盲目地覆盖它们。

最好的建议是清理您的设置:

  1. 将不是源代码的文件(如日志文件)添加到您的.gitignore文件中。
  2. 配置文件应该有抽象的连接字符串,这样它们就不会在每次切换分支或环境时发生变化(在不同的机器上使用 repo)。请参阅 progit.org/book 中 git 属性一章中的涂抹/清洁脚本。

如果您是新手,请在 webchat.freenode.net 上保持#git IRC 频道开放 :)

于 2012-08-31T20:07:07.430 回答