事情是这样的: 我在分支'A'上执行了一次Git stash,然后切换到另一个分支'B'。我回到'A'分支,但没有执行Git stash pop。我切换到主分支,然后又回到'A'分支。现在我想执行git stash pop,但无法恢复我的更改。我需要恢复那段代码,但每次我执行git stash pop时,我的文件更改都没有列出来。我没有提交任何代码。
有办法恢复我所做的更改吗?非常感谢任何关于此问题的帮助。
我们也遇到了同样的问题。以下是我们如何恢复丢失的更改:
回到B分支。
git checkout B
使用git reflog
选项管理reflog信息。
git reflog --all
输出:
f332d5c refs/stash@{0}: WIP on B: aa1d0c1 xyz commit message
现在,使用git checkout A
切换到A分支。
最后,恢复您丢失的更改。
git stash apply f332d5c
git stash apply
恢复了我的工作。谢谢! - Mitkinsgit stash apply
对我很有用! - LittleLittleQ应该可以通过查看存储区(Stashes)来查看
git stash list
或者gitk --all
另外,git stash
不会存储未跟踪的文件。如果您这样做并随后执行了 git checkout --force
切换到另一个分支以用其他分支中已跟踪的文件覆盖未跟踪的文件,那么您将丢失该内容。建议使用以下方式进行存储:
git stash -u
这将防止此类型的损失。git stash list
命令后,你可以通过索引号应用特定的储藏。例如,git stash apply 1
将会应用以 stash@{1}
开头的那一行。 - Legatogit stash
命令在分支 main
上,然后执行 git stash branch newbranch
命令,最后执行 git checkout main
命令导致我的存储被删除了。该 checkout 没有使用 --force
选项。也许这是 Git 的一个 bug 或限制? - Craig Hicks我好像丢失了我的 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.
我认为我的拉取已经包含了存储区中的相同更改,所以存储区没有产生影响。至少我希望是这样发生的。