我希望将git log和git show结合起来,这样我就可以列出给定用户、给定分支的所有更改文件。我的目标是能够查看我个人在分支生命周期内所更改的文件(与从合并中更改的文件不同)。实现此目标的最佳方法是什么?
log
输出给定的作者和/或提交者。git log --author=my_username
您可以通过命名分支来查看分支的历史记录,但请注意,仅靠这个可能无法完全满足您的期望(见下文):
git log --author=my_username my_branch
事实上,这将列出所有从该分支“可达”的提交记录。(分支是指向单个提交的指针;默认情况下,日志会跟随“父提交”指针来提供分支历史。)
这将包括您认为属于“父分支”而不是“本分支”的提交。例如:
A -- B -- C -- D <--(master)
\
E -- F <--(my_branch)
A
、B
、E
和F
都能从my_branch
到达。因此,如果你认为A
和B
是“不在分支上”的,你需要更多的东西。而这取决于情况,因为提交“在特定分支上”(而不是“可从任意数量的分支到达”)的概念是用户喜欢强加在git上的人为概念,但git实际上并不知道。
在上面的例子中,你可以这么说:
git log --author=my_username master..my_branch
从master
排除所有可达的内容,仅留下E
和F
(并基于作者信息筛选这些内容)。
最后,您似乎想要查看每个更改的补丁。 (您说“与show
组合”。)因此,您可以使用-p
:
git log -p --author=my_username master..my_branch
或者如果您决定更愿意列出文件
git log --name-only --author=my_username master..my_branch
这是我使用的一个Git别名;如果我理解问题正确,我认为这可以实现你想要的功能。
if $(git rev-parse --verify --quiet $1 >/dev/null); then
COMMIT=$1;
shift;
else
COMMIT=HEAD;
fi;
git log "$@" $(git merge-base origin/master $COMMIT)..$COMMIT;
git <别名> [提交] [额外参数]
,所以我会执行 git lo --author="John Doe"
。您可以添加额外的git log
参数,比如 -p
和 --stat
,来找到您需要的信息。
git log
允许您传递格式... 您可以通过作者对结果进行 grep... 查看 git man 页面。 - Samuel Robert