首页 > 解决方案 > 如何丢弃 Git 中的 stash pop 而不丢弃我未提交的更改?

问题描述

在执行之前我做了一些未提交的更改git stash pop。如何在stash pop不丢弃未提交更改的情况下丢弃?

git reset --hard HEAD将重置我的本地更改。

标签: gitgit-stash

解决方案


运行git stash pop更改后,更改将应用​​于您的工作树并删除存储。根据您运行时间pop和现在之间的变化量,您有可能从提交日志中恢复存储(存储确实会创建一些提交引用),但这可能并不容易......

首先,按照这篇文章尝试获取您要恢复的存储提交的哈希值。找到它后,用它创建一个分支(我称之为它stash_data,并假设我们从 branch 开始master):

git branch stash_data [stash hash ID]

该分支现在应该只有存储的内容,没有其他更改。现在创建一个新分支来提交所有未提交的更改——包括存储非存储(我称之为combined_data)。

[on `master` branch, with all changes]
git checkout -b combined_data
git add [your files]
git commit -m "preparing to revert a stash pop"

现在有3个分店。一个应用了存储更改 ( stash_data),一个应用了所有更改 ( combined_data),一个位于基线 ( master)。stash_data应用和之间master的差异combined_data

[still on branch `combined_data`]
git diff stash_data master | git apply

combined_data现在应该只有那些不在存储中的更改,并且stash_data应该只有存储中的更改。


推荐阅读