丢失的Git存储更改。

54

事情是这样的: 我在分支'A'上执行了一次Git stash,然后切换到另一个分支'B'。我回到'A'分支,但没有执行Git stash pop。我切换到主分支,然后又回到'A'分支。现在我想执行git stash pop,但无法恢复我的更改。我需要恢复那段代码,但每次我执行git stash pop时,我的文件更改都没有列出来。我没有提交任何代码。

有办法恢复我所做的更改吗?非常感谢任何关于此问题的帮助。


4
尝试运行命令 "git stash list",以查看可用的隐藏存储。 - JamesOR
4个回答

45

我们也遇到了同样的问题。以下是我们如何恢复丢失的更改:

  1. 回到B分支。

    git checkout B

  2. 使用git reflog选项管理reflog信息。

    git reflog --all

    输出:

    f332d5c refs/stash@{0}: WIP on B: aa1d0c1 xyz commit message

  3. 现在,使用git checkout A切换到A分支。

  4. 最后,恢复您丢失的更改。

    git stash apply f332d5c


6
可以翻译为:我有提交权限,但丢失了我的暂存区。通过git stash apply恢复了我的工作。谢谢! - Mitkins
1
@Mitkins非常感谢,我也遇到了这个问题,git stash apply对我很有用! - LittleLittleQ
4
感谢你!说实话,您与http://effectif.com/git/recovering-lost-git-commits的结合,刚刚帮我省下了最后的两周时间。 - trdavidson
我设法丢失了我的存储,我的新Mac上没有启用TimeMachine。远程备份没有帮助。谁知道你可以找回一个丢失的存储。谢谢。 - Darren

45

应该可以通过查看存储区(Stashes)来查看

git stash list
或者
gitk --all

另外,git stash 不会存储未跟踪的文件。如果您这样做并随后执行了 git checkout --force 切换到另一个分支以用其他分支中已跟踪的文件覆盖未跟踪的文件,那么您将丢失该内容。建议使用以下方式进行存储:

git stash -u
这将防止此类型的损失。

13
在运行 git stash list 命令后,你可以通过索引号应用特定的储藏。例如,git stash apply 1 将会应用以 stash@{1} 开头的那一行。 - Legato
1
你救了我的项目)) - Hayk Mkrtchyan
如果我在暂存列表中找不到我的更改怎么办? - Kinjal Rathod
2
执行 git stash 命令在分支 main 上,然后执行 git stash branch newbranch 命令,最后执行 git checkout main 命令导致我的存储被删除了。该 checkout 没有使用 --force 选项。也许这是 Git 的一个 bug 或限制? - Craig Hicks

1
我也遇到过类似的情况。简而言之,请确认您没有意外将新文件推送到其他分支中。
以下是我的经历:我隐藏了我的东西,从“dev”切换到“master”进行快速热修复。当我将我的热修复推送到主分支时,我没有注意到我还将那些本应属于dev的新文件添加到了主分支中,我也认为stash包括了这些文件。

0

我好像丢失了我的 git stash 更改,但我认为可能是因为这些更改已经应用。

我做了类似于以下的操作:

> git pull
conflict detected; stash or commit your changes first
(list of conflicting files)

> git stash
> git pull
success (tons of changes pulled)

> git stash pop
On branch master
Your branch is up to date with 'origin/master'.

nothing to commit, working tree clean
Dropped refs/stash@{0}

> git status
On branch master
Your branch is up to date with 'origin/master'.

nothing to commit, working tree clean

> git stash list
(nothing)

> git stash pop
No stash entries found.

我认为我的拉取已经包含了存储区中的相同更改,所以存储区没有产生影响。至少我希望是这样发生的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接