基础用法

初始配置

  1. git config --global alias.co checkout
  2. git config --global alias.ci commit
  3. git config --global alias.br branch
  4. git config --global alias.st status

拉取远程分支

  1. # 方式一
  2. git checkout -b b1 origin/b1
  3. # 方式二
  4. git fetch origin b1:b1

简单回滚

  1. # 用新 commit 回滚某一次提交的内容
  2. git revert CommitSHA
  3. # 如果要回滚多个提交需要显示写明 使用 “..” 分隔
  4. git revert CommitSHA..HEAD // commitSHA 回滚到目前提交,回滚多少个产生多少个新 commit 记录
  5. git revert -n CommitSHA..HEAD // commitSHA 回滚到目前提交,并且只产生一个 commit 记录
  6. # 特殊情况:当回滚多个提交时,中间有合并的情况,需要指定以哪个分支作为主线(如下图)
  7. git revert -m 1 CommitSHA // 设置 m/mainline 指定主线分支,1 代表所在分支,2 代表另一分支;-n -m 貌似不能同时使用

GIT 实用笔记 - 图1

补充提交 && 修改提交

  1. # 修改最近一次提交
  2. git commit --aemnd
  3. # 编辑之前三次的提交
  4. git rebase -i HEAD~3
  5. git rebase -i startCommit endCommit
  6. -- pick 不做更改
  7. -- edit 可以拆分提交 修改提交信息
  8. -- squash 合并到前一个提交中

清理废弃分支

  1. git br | grep -v master | xargs git br -d

高级用法

Rebase 分支合并移动

  1. # 应用分支 branch 的改动
  2. git rebase branch
  3. # 应用 server 和 client 分支共同节点之后的 client 部分的修改
  4. git rebase --onto master server client

SubModule 子模块

  1. # 添加子模块
  2. git submodule add clone_address alias_name
  3. # 删除子模块
  4. git rm --cached path/to/submodule
  5. vi .gitmodules // 删除对应配置
  6. vi .git/config // 删除配置项中子模块相关条目
  7. rm -rf .git/modules/submodule_name

代码量统计

  1. # 单人代码量统计
  2. 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 }' -
  3. # 项目所有参与人员代码量统计
  4. 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