我为一个功能编写了相当多的代码并隐藏了git中的更改。
之后我将几个更改推送到存储库并执行git stash并多次应用(读取超过100次)。
差不多2个月后,我现在想从git stash中检索更改 - 但无论如何我都找不到它们。
尝试了多个git stash apply
,git stash list
,git stash list -p
。什么都行不通。我找不到那些陈旧的变化。
希望我已经备份而不是信任git来藏匿他们......叹息......
有人可以帮忙吗?
答案 0 :(得分:16)
试试这个:
git stash list -p | grep 'diff --git' | grep <your file name>
这将在列表中找到您的文件。这可能需要一段时间。
一件事:git stash apply
不会丢弃藏匿物。申请成功后,您应git stash drop
,这样就不会使您的清单混乱。就个人而言,我使用git stash pop
来应用存储。
答案 1 :(得分:10)
要搜索您藏匿中的更改,请使用git stash list
和镐选项-G
(来自git log
):
git stash list -G regex_matching_some_added_or_removed_string
答案 2 :(得分:5)
注意:如果隐藏合并提交,git stash list -p
将不返回任何内容。
这将随Git 2.2(2014年第4季度)和commit 288c67c Jeff King (peff
)改变:
stash
:默认列出工作树差异列出藏匿处时,您可以提供任意
git log
个选项来更改显示。但是,只添加&#34;-p
&#34;什么都不做,因为每个藏匿实际上是合并提交。这个实现细节很容易被遗忘,导致混淆用户思考&#34;
-p
&#34;不管用。我们可以通过默认为&#34;--first-parent -m
&#34;来实现这一点 显示工作树的差异。
这完全省略了藏匿的索引部分,但它很简单,它匹配&#34;git stash show
&#34;提供。对藏匿的真实形式更有兴趣的人可以使用&#34;
--cc
&#34;覆盖&#34;-m
&#34;和&#34;--first-parent
&#34;然后什么也不做 对于差异,它只影响非组合差异,因此&#34;--cc
&#34;覆盖它。
而对于遍历,无论如何我们都在走线性reflog,所以我们甚至不关心 关于父母。
答案 3 :(得分:4)
如果git stash list
中只列出了几个藏匿处,那么您可以逐个检查它们,看它们是否正确:
git show 'stash@{0}'
git show 'stash@{1}'
等
如果您在许多存储中有一些代码,并且能够记住您在文件中输入的字符串或关键字(几乎)唯一标识该代码(我在这里使用DUNKIRK
),使用以下bash
命令搜索它。
for i in `git reflog --pretty=format:%H stash`; do git grep DUNKIRK $i; done
请注意,git grep会搜索整个结帐 - 而不仅仅是更改。
比较@siri的答案,该答案搜索在stashes中更改的文件名 - 这是另一种有用的策略。
或者,仅搜索差异
git reflog -p stash | less
然后搜索您的字符串OR文件,或者只是浏览它。这可能很大。
答案 4 :(得分:3)
这是我使用的命令。它可以帮助我识别被引用的存储。
git stash list | while IFS=: read STASH ETC; do echo "$STASH: $ETC"; git diff --stat $STASH~..$STASH --; done | grep -e 'stash\|<partial_name_of_file_being_searched_for>'
我也将它与我的.bashrc
文件中的别名结合使用,如下所示:
function gitsearch()
{
searchCrit='stash\|'$1
git stash list | while IFS=: read STASH ETC; do echo "$STASH: $ETC"; git diff --stat $STASH~..$STASH --; done | grep -e $searchCrit
}
alias githunt=gitsearch
最终结果是我可以搜索我的git stashes:
githunt LoanApplicationFee
并得到以下结果,我可以很快发现stash 45有我正在寻找的东西:
答案 5 :(得分:1)
上述答案中的git命令组合帮助了我所需要的东西。在这里发布我的答案,因为它可能会帮助其他人,因为我无法接受任何一个答案/评论
git stash list -p - showed me the list of stashes
git stash pop 'stash@{12}' - popped out the 12th stash which contains my code.