我在从 git 中存储且未跟踪的文件中恢复更改时遇到了问题。请参阅下面的简单示例:
mkdir test_stash
cd test_stash/
git init
echo "text" | tee a.txt b.txt
git add a.txt
git commit -m "First commit"
git stash -u #stash b.txt
echo "newtext" > b.txt
git add b.txt
git commit -m "Second commit"
git stash apply
这将返回一个错误:
b.txt already exists, no checkout
Could not restore untracked files from stash entry
仅举这个例子有点傻,但是我在从远程提取之前存储更改并发现在远程上创建了一个同名的新文件时遇到了这个问题。
经过一些谷歌搜索后,我能够使用以下命令恢复更改:
git checkout stash -- .
git checkout stash^3 -- .
git reset HEAD . #to unstage
但这似乎很不靠谱。有没有办法强制我的git stash apply
,从而将我的工作区恢复到存储之前的原始状态?无论如何,b.txt 上的更改已经提交,所以我不会冒险丢失未保存的更改。
答案1
当你保存存储时,git 还会记住提交。因此,你可以简单地创建新分支基于此提交git stash branch <branchname>
而不是应用存储。