基础用法
初始配置
git config --global alias.co checkout
git config --global alias.ci commit
git config --global alias.br branch
git config --global alias.st status
拉取远程分支
# 方式一
git checkout -b b1 origin/b1
# 方式二
git fetch origin b1:b1
简单回滚
# 用新 commit 回滚某一次提交的内容
git revert CommitSHA
# 如果要回滚多个提交需要显示写明 使用 “..” 分隔
git revert CommitSHA..HEAD // 从 commitSHA 回滚到目前提交,回滚多少个产生多少个新 commit 记录
git revert -n CommitSHA..HEAD // 从 commitSHA 回滚到目前提交,并且只产生一个 commit 记录
# 特殊情况:当回滚多个提交时,中间有合并的情况,需要指定以哪个分支作为主线(如下图)
git revert -m 1 CommitSHA // 设置 m/mainline 指定主线分支,1 代表所在分支,2 代表另一分支;-n 和 -m 貌似不能同时使用
补充提交 && 修改提交
# 修改最近一次提交
git commit --aemnd
# 编辑之前三次的提交
git rebase -i HEAD~3
git rebase -i startCommit endCommit
-- pick 不做更改
-- edit 可以拆分提交 修改提交信息
-- squash 合并到前一个提交中
清理废弃分支
git br | grep -v master | xargs git br -d
高级用法
Rebase 分支合并移动
# 应用分支 branch 的改动
git rebase branch
# 应用 server 和 client 分支共同节点之后的 client 部分的修改
git rebase --onto master server client
# 添加子模块
git submodule add clone_address alias_name
# 删除子模块
git rm --cached path/to/submodule
vi .gitmodules // 删除对应配置
vi .git/config // 删除配置项中子模块相关条目
rm -rf .git/modules/submodule_name
代码量统计
# 单人代码量统计
git log --author="nickname" --pretty=tformat: --numstat | ggrep -P '^[\d\t]+(src/(?!widgets))' | 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 | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc }' -; done