我有一个 100 多个提交 ID 的列表。我想要git log
我的整个回购,但我需要排除这些提到的提交。
我知道,有,git log --grep=something
但我无法想象这个命令在有 100 多个元素时会是什么样子。有没有更简单的方法来实现它?
我有一个 100 多个提交 ID 的列表。我想要git log
我的整个回购,但我需要排除这些提到的提交。
我知道,有,git log --grep=something
但我无法想象这个命令在有 100 多个元素时会是什么样子。有没有更简单的方法来实现它?
grep
有适合您的选择。从 grep 的手册页:
-f FILE, --file=FILE
从 FILE 中获取模式,每行一个。空文件包含零个模式,因此不匹配任何内容。(-f 由 POSIX 指定。)
-v, --invert-match
反转匹配的感觉,选择不匹配的行。(-v 由 POSIX 指定。)
所以你可以简单地做:
git log --pretty=oneline | grep -v -f list_to_exclude
假设您有日志格式格式:
--pretty="%H [%ad] - %s"
以及文件 exclude.lst 中的提交列表,每个提交都在新行上;
然后要排除这些提交,请使用:
# generate the sed program to exclude
while read c; do
echo "/^$c /D"
done > /tmp/exclude.sed < exclude.lst
# filter out
git log --pretty="%H [%ad] - %s" | sed -f /tmp/exclude.sed