删除远程分支
git push origin --del rzluan-branch/feature1
克隆指定分支到指定文件夹
git clone -b [branch_name] [git_url] [dir_path]
变更统计
git log --author=rzluan --after="2019-11-01 00:00:00" --before="2019-11-30 23:59:59" --name-only | grep '^src/*' | sort | uniq
git log --author=rzluan --after="2019-11-01 00:00:00" --before="2019-11-30 23:59:59" --numstat | grep "src" | awk '{a[$3]+=$1;b[$3]+=$2}END{for(j in a) print j,"代码变更"(a[j]+b[j])"行"}'
git log --author=rzluan --after="2019-11-01 00:00:00" --before="2019-11-30 23:59:59" --numstat | grep "src" | awk '{a[$3]+=($1+$2)}END{for(j in a) b+=a[j]} END{print "总行数",b}'
修改commit记录
# 1. 修改提交时间
git commit --amend --date="May 8 12:00:30 2020 +0800"`
# 2. 修改提交人信息
`git commit --amend --author "luanrzh luanrzh@qq.com"`
# 3. 强制推送至远程仓库
`git push <remote> <branch> -f
撤销commit记录
# 撤销commit,撤销暂存区,工作空间代码改动不变
git reset HEAD
# 同上
git reset --mixed HEAD^
# 撤销commit,暂存区不变,工作空间代码改动不变
git reset --soft HEAD^
# 撤销commit,清空暂存区,清空工作空间代码改变
git reset --hard HEAD^
# 撤销n次commit
git reset HEAD~n
# 修改commit注释
git commit --amend
清除所有commit记录
参见Git – Remove All Commits – Clear Git History (Local & Remote)
# 切换到一个临时分支,该分支的状态和`git init`很像
git checkout --orphan temp_branch
# 在一步可以做一些特殊操作,如删除当前文件夹下所有文件、新增文件等等,后续新分支将会以此处的文件状态为准
git add -A # 提交工作区中所有文件变动,到临时分支暂存区
git commit -am "The first commit" # 提交暂存区中所有文件变动,到临时分支本地仓库
git branch -D main # 删除需要清除所有commit记录的分支
git branch -m main # 将当前临时分支修改成刚刚删掉的分支名
#git push -f origin main # 推送到远程仓库(!!!危险操作!!!)
查看每个文件的最新与首次commit时间
echo "最新commit时间, 首次commit时间, 文件名" > commit_date.csv
find content/posts | grep md | while IFS= read -r file; do
last_date=$(git log -1 --pretty=format:"%ad" --date=iso-strict -- "$file" 2>/dev/null)
first_date=$(git log --follow --diff-filter=A --pretty=format:"%ad" --date=iso-strict -- "$file" | tail -1 2>/dev/null)
echo "$last_date, $first_date, $file"
done | sort -r >> commit_date.csv