所以我正在学习本周使用Git Stash,并且发现所有这些stashes一直在我的系统上积累.我放错了一些代码,现在我有十几个代码0-11.
有没有办法可以在存储区中的文件中搜索这些存储区中的字符串值,以找到我正在寻找的代码?或者我是否只需要通过并重新应用每个存储来搜索/查看它们我想要找到的代码?
小智 19
git stash list -S "my string"适用于 Git 2.28,查找添加或删除"my string".
我不知道这个功能已经存在多久了;该文档暗示它应该接受与 相同的所有选项git log,包括-S,但我清楚地记得几年前无法以这种方式进行搜索。
Jos*_*erg 17
有一些有用的想法 这个要点和讨论主题中
首先,只列出匹配的 stashes 很容易(有或没有 -i,取决于大小写)
git stash list -i -G<regexp>
Run Code Online (Sandbox Code Playgroud)
如果没有太多可挖掘的内容,您可以添加-p以完整打印匹配的存储。
git stash list -i -p -G<regexp>
Run Code Online (Sandbox Code Playgroud)
为“真实”案例提供更多功能,添加到.gitconfig:
[alias]
stashgrep = "!f() { for i in `git stash list --format=\"%gd\"` ; \
do git stash show -p $i | grep -H --label=\"$i\" \"$@\" ; done ; }; f"
Run Code Online (Sandbox Code Playgroud)
然后你可以git stashgrep用你喜欢的任何grep参数(-w,-i)调用。例如,
git stashgrep -i <regexp>
Run Code Online (Sandbox Code Playgroud)
这与上面的一些答案不同,因为它预先设置了存储 ID 以显示每个差异的来源:
% git stashgrep -i tooltip
stash@{5}: // resetBatchActionTooltip();
stash@{5}: addAcceleratorsAndTooltips(lToolMenu, lToolButton, iListener, iTool);
stash@{5}: private void addAcceleratorsAndTooltips(AbstractButton lToolMenu,
stash@{5}:+ String lToolTip = iTool.getToolTipText();
stash@{5}: lToolButton.setToolTipText(lToolTip);
stash@{20}:+ private static final String invalidSelectionTooltip = "Invalid selection. Please choose another.";
stash@{20}:- private final String invalidSelectionTooltip = "Invalid selection. Please choose another.";
stash@{20}: ((JTextField)lComponent).setToolTipText(
Run Code Online (Sandbox Code Playgroud)
And*_*ovs 11
git stash show -p stash@{n} | grep "john cena" 是我认为唯一的选择.
当然你可以编写自己的脚本.
单线:
git grep whatever $(git stash list -q | cut -d":" -f 1)
Run Code Online (Sandbox Code Playgroud)
和 git grep 方便地输出带有存储名称和文件名称的更改行:
stash@{43}:common/ot/whatever.js:exports.whatever = (foo, deps) => {
stash@{44}:common/ot/whatever.js:exports.whatever = (foo, deps) => {
Run Code Online (Sandbox Code Playgroud)