0

我有一个 100 多个提交 ID 的列表。我想要git log我的整个回购,但我需要排除这些提到的提交。

我知道,有,git log --grep=something但我无法想象这个命令在有 100 多个元素时会是什么样子。有没有更简单的方法来实现它?

4

2 回答 2

2

grep有适合您的选择。从 grep 的手册页:

-f FILE, --file=FILE
从 FILE 中获取模式,每行一个。空文件包含零个模式,因此不匹配任何内容。(-f 由 POSIX 指定。)

-v, --invert-match
反转匹配的感觉,选择不匹配的行。(-v 由 POSIX 指定。)

所以你可以简单地做:

git log --pretty=oneline | grep -v -f list_to_exclude
于 2013-04-12T12:43:36.393 回答
1

假设您有日志格式格式:

--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
于 2013-04-12T13:08:54.097 回答