git 不常见的操作技巧¶
以下记录一些不太常见的git操作技巧
删除远程分支或tag¶
git push --delete origin tagname|branch_name
正确的切换到指定的tag¶
git checkout -b new_branch tagname
要修改一系列提交的用户信息¶
假定从 a20220a
开始到当前最新提交的所有用户信息需要修改,可以这样做
git rebase --onto a20220a \
--exec "git commit --amend --author=\"wgzhao <wgzhao@gmail.com>\" " a20220a
我们可以把这个操作保存为别名,方便以后操作,编辑 ~/.gitconfig
, 增加以下内容:
[alias]
reauthor = !bash -c 'git rebase --onto $1 --exec \"git commit --amend --author=$2\" $1' --
下次运行就是这样
git reauthor a20220a "wgzhao <wgzhao@gmail.com>"
git 统计命令¶
统计某人代码提交量¶
git log --author="zhaowg" --pretty=tformat: --numstat | \
awk '{ add += $1; subs += $2; loc += $1 - $2 }
END { printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc }' -
统计所有人代码提交量(指定统计提交文件类型)¶
git log --format='%aN' | sort -u | \
while read name; do
echo -en "$name\t";
git log --author="$name" --pretty=tformat: --numstat | \
grep "\(.html\|.java\|.xml\|.properties\|.css\|.js\|.txt\)$" | \
awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc }' -;
done
统计某时间范围内的代码提交量¶
git log --author="zhaowg" --since='2019-01-01' --until='2021-02-01' --format='%aN' | sort -u | while read name; do echo -en "$name\t"; git log --author="$name" --pretty=tformat: --numstat | grep "\(.html\|.java\|.xml\|.properties\)$" | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc }' -; done
查看git提交前5名¶
git log --pretty='%aN' | sort | uniq -c | sort -k1 -n -r | head -n 5
贡献值统计¶
git log --pretty='%aN' | sort -u | wc -l
提交数统计¶
git log --oneline | wc -l
统计或修改的行数¶
git log --stat|perl -ne 'END { print $c } $c += $1 if /(\d+) insertions/'