隐藏了一些代码,但不知道它藏在哪个 - 如何搞清楚?

时间:2014-01-15 06:46:26

标签: git git-stash

我为一个功能编写了相当多的代码并隐藏了git中的更改。

之后我将几个更改推送到存储库并执行git stash并多次应用(读取超过100次)。

差不多2个月后,我现在想从git stash中检索更改 - 但无论如何我都找不到它们。

尝试了多个git stash applygit stash listgit stash list -p。什么都行不通。我找不到那些陈旧的变化。

希望我已经备份而不是信任git来藏匿他们......叹息......

有人可以帮忙吗?

6 个答案:

答案 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有我正在寻找的东西:

enter image description here

答案 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.