配置

  1. 显示当前的Git配置
    • git config —list
  2. 编辑Git配置文件
    • git config -e
  3. 设置用户名和邮箱
    • git config —global user.name “Rolle”
    • git config —global user.email “i@liangyouze.com”
  4. 初始化仓库(在对应目录下)
    • git init

代码提交

  1. 添加指定文件到暂存区
    • git add file1 file2 file3
  2. 添加指定目录到暂存区,包括子目录
    • git add [dir]
  3. 添加当前目录的所有文件到暂存区
    • git add .
  4. 删除工作区文件,并且将这次删除放入暂存区
    • git rm [file1] [file2] …
  5. 停止追踪指定文件,但该文件会保留在工作区
    • git rm —cached [file]

分支

  1. 前仓库中存在的所有分支列表
    • git branch
  2. 查看远程分支
    • git branch -r
  3. 列出所有本地分支和远程分支
    • git branch -a
  4. 创建分支
    • git branch branchName
  5. 新建一个分支,并切换到该分支
    • git checkout -b [branch]
  6. 切换分支
    • git checkout branchName
  7. 删除本地分支
    • git branch -d branchName
  8. 删除远程分支
    • git push origin —delete xxxx
  9. 将分支dev与当前分支进行合并
    • git merge origin/dev
  10. 新建一个分支,指向指定commit
    • git branch branchName [commit]
  11. 合并dev分支到master
    • git merge dev
  12. 选择一个commit,合并进当前分支
    • git cherry-pick [commit]
  13. 从git的某次提交(commit)拉取分支
    • git checkout commitId -b branchname

撤销

  1. 撤销一个合并
    • git reset —hard HEAD
  2. 恢复暂存区的指定文件到工作区
    • git checkout [file]
  3. 重置暂存区与工作区,与上一次commit保持一致
    • git reset —hard
  4. 重置当前分支的HEAD为指定commit,同时重置暂存区和工作区,与指定commit一致
    • git reset —hard 1094a
  5. 撤销工作区的修改(一键还原,可以恢复误删除的,前提是还没提到暂存区)
    • git chekout — fileName

比较

  1. 比较两个版本差异
    • git diff master..test
  2. 当前工作目录和上次提交与本地索引之间的差异
    • git diff
  3. 当前分支与其他分支的不同
    • git diff test
  4. 查看工作区和版本库里面最新版本的区别:
    • git diff HEAD — current.txt

存储

  1. 存储当前状态
    • git stash ‘work’
  2. 恢复(恢复的同时把stash内容也删了)
    • git stash pop
  3. 恢复指定的stash
    • 先 git stash list
    • git stash apply stash@{0}
  4. 创建一个标签
    • git tag v1.0
  5. 给之前的commit打上一个标签
    • git tag v1.0 f534324
  6. 查看tag
    • git tag
  7. 查看标签信息
    • git show v1.0
  8. 删除标签
    • git tag -d v1.0
  9. 推送到远程标签
    • git push origin v1.0

查看信息

  1. 显示有变更的文件
    • git status
  2. 显示当前分支的版本历史
    • git log
    • git log —oneline
  3. 显示commit历史,以及每次commit发生变更的文件
    • git log —stat
  4. 查看分支合并图
    • git log —graph
  5. 显示所有提交过的用户,按提交次数排序
    • git shortlog -sn
  6. 显示指定文件是什么人在什么时间修改过
    • git blame [file]
  7. 显示今天你写了多少行代码
    • git diff —shortstat “@{0 day ago}”
  8. 显示某次提交的元数据和内容变化
    • git show [commit]
  9. 将本地分支推动到远程分支
    • git push origin feature-branch:feature-branch //推送本地的feature-branch(冒号前面的)分支到远程origin的feature-branch(冒号后面的)分支(没有会自动创建)
  10. 把远程分支拉到本地
    • git fetch origin dev(dev为远程仓库的分支名)
  11. 查看提交线
    • git log —graph —pretty=oneline —abbrev-commit
  12. 统计个人代码量
    • git log —author=”youze” —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 }’ -
  13. 查看排名前5的贡献者
    • git log —pretty=’%aN’ | sort | uniq -c | sort -k1 -n -r | head -n 5

奇淫技巧

  1. git fetch —all && git reset —hard origin/master
    • git fetch —all && git reset —hard origin/master
  2. 展示本地仓库中任意两个 commit 之间的文件变动:
    • git diff
  3. 输出暂存区和本地最近的版本 (commit) 的 different (不同)
    • git diff —cached
  4. 输出工作区暂存区 和本地最近的版本 (commit) 的 different (不同)。
    • git diff HEAD
  5. 快速切换到上一个分支
    • git checkout -
  6. 删除已经合并到 master 的分支
    • git branch —merged master | grep -v ‘^*| master’ | xargs -n 1 git branch -d
  7. 关联远程仓库(都行)
    • git branch -u origin/mybranch
    • git push origin/mybranch -u
  8. 重命名本地分支
    • git branch -m
  9. 放弃所有修改:
    • git checkout .
  10. 以新增一个 commit 的方式还原某一个 commit 的修改
    • git revert
  11. 删除所有的stash
    • git stash clear
  12. 配置多个remote(方便从不同的分支上拉取)
  13. 统计某人代码提交量
    1. git log —author=”xxxxxxxxxxxxx” —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 }’ -
  14. 统计所有人代码提交量
    1. 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
  15. 统计某时间范围内的代码提交量
    1. git log —author=mengfanxiao —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
  16. 查看git提交前5名
    1. git log —pretty=’%aN’ | sort | uniq -c | sort -k1 -n -r | head -n 5

17 清楚已删除的远端分支

  • git fetch -p

提交规范

先来看看公式:

():
  • feat:新功能(feature)
  • fix:修补bug
  • docs:文档(documentation)
  • style: 格式(不影响代码运行的变动)
  • refactor:重构(即不是新增功能,也不是修改bug的代码变动)
  • test:增加测试
  • chore:构建过程或辅助工具的变动

scope

  • 用于说明 commit 影响的范围,比如数据层、控制层、视图层等等,视项目不同而不同。

subject

commit 目的的简短描述,不超过50个字符。

多次提交合并

参考

廖雪峰
Git的奇技淫巧