如何让git pull输出显示每个文件的最后提交作者?
实现git pull显示文件最后贡献者的方法
当然可以啦!其实git本身并没有给git pull直接添加显示文件最后贡献者的内置选项,但咱们可以组合几个命令来实现这个需求,分两种常用场景给你说明:
场景1:拉取完成后,查看本次pull涉及文件的最后作者
拉取代码之后,执行下面的命令就能列出本次pull变更的所有文件,以及每个文件最后一次修改的作者:
git log --name-only --oneline HEAD@{1}..HEAD | grep -v "^[0-9a-f]" | while read file; do if [ -n "$file" ]; then author=$(git log -1 --pretty=format:"%an" "$file") echo "$file - $author" fi done
命令解释:
HEAD@{1}..HEAD:指定范围为本次pull之前的版本到当前版本,精准筛选出pull带来的变更grep -v "^[0-9a-f]":过滤掉日志里的提交哈希行,只保留变更的文件名git log -1 --pretty=format:"%an" "$file":获取该文件最后一次提交的作者名称(%an表示作者名,换成%ae可以显示邮箱)
场景2:先查看将要拉取的文件作者,再决定是否pull
如果想先确认远程分支的变更文件及对应作者,再执行拉取,可以先fetch远程代码,再运行:
git fetch origin git diff --name-only main..origin/main | while read file; do if [ -n "$file" ]; then author=$(git log -1 --pretty=format:"%an" origin/main -- "$file") echo "$file - $author" fi done
注意:把
main换成你实际使用的分支名称,比如master或者其他自定义分支
简化操作:做成Git别名
要是觉得每次敲长命令麻烦,可以把场景1的命令做成Git别名,以后一键执行:
- 打开你的
.gitconfig文件(通常在用户根目录下) - 添加以下内容:
[alias] pull-authors = "!git pull && git log --name-only --oneline HEAD@{1}..HEAD | grep -v \"^[0-9a-f]\" | while read file; do if [ -n \"$file\" ]; then author=$(git log -1 --pretty=format:\"%an\" \"$file\"); echo \"$file - $author\"; fi done"
- 保存后,以后直接输入
git pull-authors,就能完成拉取并自动显示文件和对应最后作者啦!
内容的提问来源于stack exchange,提问作者František Heča
相关产品推荐
相关产品推荐

