您可能想通过向您的rev-list
中添加git log
来添加历史记录以搜索整个存储库
git log --grep 'Something relevant in my commits' $(git rev-list --all)
类似的东西应该在 .gitconfig 文件中起作用
[alias]
search = "!f() { git log --grep \"$1\" $(git rev-list --all); }; f"
[log]
date = iso
在这里date = iso
可以得到更好的日期(当前格式为2019-11-26 17:35:30 +0100
)
,
首先介绍一下git log的--grep
option:
示例:
# two commits contain 'foo' in their message (one of them also contains 'bar'):
$ git log --oneline --grep foo
b76121c bar baz foo
b7a342f foo
# two commits contain 'bar' in their message (one of them also contains 'foo'):
$ git log --oneline --grep bar
bbb27f3 (HEAD -> master) bar
b76121c bar baz foo
# if I look for both patterns : I get the union of both searches (3 commits)
$ git log --oneline --grep foo --grep bar
bbb27f3 (HEAD -> master) bar
b76121c bar baz foo
b7a342f foo
# if I add '--all-match' : only the commit which contains both is kept
$ git log --oneline --grep foo --grep bar --all-match
b76121c bar baz foo
要回答您的问题:这是一个示例脚本,该脚本包含一个参数列表,并将其转换为git log --all-match --grep aaa --grep bbb
命令:
# in file git-search-msg :
#!/bin/bash
cmd=("log" "--all-match")
for var in "$@"
do
cmd+=('--grep')
cmd+=("$var")
done
git "${cmd[@]}"
如果将其粘贴到名为git-search-msg
的文件中,然后将其放在PATH
上的某个位置,那么git search-msg foo bar baz
会做您想要的事情。
以下内容在普通sh
中有效,但使用eval
:
#!/bin/sh
str="git log --all-match"
for var in "$@"
do
# This loops takes arguments one by one and adds
# them as '--grep' args to the 'git log' command.
str="$str --grep '$var'"
done
# tech note : this sample script does not escape single quotes
eval $str
如果您设法将其排成一行(并正确地对其进行转义),则可以在别名中使用它。
请注意,尽管混有eval
的转义问题...
,
通常,将git命令与匿名bash函数一起使用可让我们访问其他功能。
这是我所做的搜索别名的输出,可以满足您的需求。我用提交消息“ 1”,“ 2”,“ 3”,“ 4”创建了4个提交:
zrrbite@ZRRBITE MINGW64 /d/dev/git/test (new)
$ git ls -4
d0ebbb3 (HEAD -> new) 4 [Martin Kjeldsen]
174f539 3 [Martin Kjeldsen]
43d6a01 2 [Martin Kjeldsen]
05e7e0a 1 [Martin Kjeldsen]
zrrbite@ZRRBITE MINGW64 /d/dev/git/test (new)
$ git search 1 2 3 4
commit 05e7e0a232e093ddfcbd90d8071dc4a84e4295b7
Author: Martin Kjeldsen <kjeldsen@gmail.com>
Date: Fri Nov 15 23:09:02 2019 +0100
1
commit 43d6a019742a38c1b06aa7a40bc8f34d46d0dcc8
Author: Martin Kjeldsen <kjeldsen@gmail.com>
Date: Fri Nov 29 00:57:38 2019 +0100
2
commit 174f539b151533406b5fa7f2c8541dfeb194bfac
Author: Martin Kjeldsen <kjeldsen@gmail.com>
Date: Fri Nov 29 00:57:46 2019 +0100
3
commit d0ebbb3eb1071653b0578cfdd14c0d6a7c112b1f
Author: Martin Kjeldsen <kjeldsen@gmail.com>
Date: Fri Nov 29 00:58:01 2019 +0100
4
另一项测试:
zrrbite@ZRRBITE MINGW64 /d/dev/git/test (new)
$ git search 2 4
commit 43d6a019742a38c1b06aa7a40bc8f34d46d0dcc8
Author: Martin Kjeldsen <kjeldsen@gmail.com>
Date: Fri Nov 29 00:57:38 2019 +0100
2
commit d0ebbb3eb1071653b0578cfdd14c0d6a7c112b1f
Author: Martin Kjeldsen <kjeldsen@gmail.com>
Date: Fri Nov 29 00:58:01 2019 +0100
4
这里是别名,它只是循环遍历每个参数并调用git log --grep
。等效于调用git log --grep <a> --grep <b> --grep <c> ...
:
[alias]
search = "!f() { for l in \"$@\"; do git log --grep \"$l\"; done; }; f"
本文链接:https://www.f2er.com/3011157.html