配置
- 显示当前的Git配置
- git config —list
- 编辑Git配置文件
- git config -e
- 设置用户名和邮箱
- git config —global user.name “Rolle”
- git config —global user.email “i@liangyouze.com”
- 初始化仓库(在对应目录下)
- git init
代码提交
- 添加指定文件到暂存区
- git add file1 file2 file3
- 添加指定目录到暂存区,包括子目录
- git add [dir]
- 添加当前目录的所有文件到暂存区
- git add .
- 删除工作区文件,并且将这次删除放入暂存区
- git rm [file1] [file2] …
- 停止追踪指定文件,但该文件会保留在工作区
- git rm —cached [file]
分支
- 前仓库中存在的所有分支列表
- git branch
- 查看远程分支
- git branch -r
- 列出所有本地分支和远程分支
- git branch -a
- 创建分支
- git branch branchName
- 新建一个分支,并切换到该分支
- git checkout -b [branch]
- 切换分支
- git checkout branchName
- 删除本地分支
- git branch -d branchName
- 删除远程分支
- git push origin —delete xxxx
- 将分支dev与当前分支进行合并
- git merge origin/dev
- 新建一个分支,指向指定commit
- git branch branchName [commit]
- 合并dev分支到master
- git merge dev
- 选择一个commit,合并进当前分支
- git cherry-pick [commit]
- 从git的某次提交(commit)拉取分支
- git checkout commitId -b branchname
撤销
- 撤销一个合并
- git reset —hard HEAD
- 恢复暂存区的指定文件到工作区
- git checkout [file]
- 重置暂存区与工作区,与上一次commit保持一致
- git reset —hard
- 重置当前分支的HEAD为指定commit,同时重置暂存区和工作区,与指定commit一致
- git reset —hard 1094a
- 撤销工作区的修改(一键还原,可以恢复误删除的,前提是还没提到暂存区)
- git chekout — fileName
比较
- 比较两个版本差异
- git diff master..test
- 当前工作目录和上次提交与本地索引之间的差异
- git diff
- 当前分支与其他分支的不同
- git diff test
- 查看工作区和版本库里面最新版本的区别:
- git diff HEAD — current.txt
存储
- 存储当前状态
- git stash ‘work’
- 恢复(恢复的同时把stash内容也删了)
- git stash pop
- 恢复指定的stash
- 先 git stash list
- git stash apply stash@{0}
- 创建一个标签
- git tag v1.0
- 给之前的commit打上一个标签
- git tag v1.0 f534324
- 查看tag
- git tag
- 查看标签信息
- git show v1.0
- 删除标签
- git tag -d v1.0
- 推送到远程标签
- git push origin v1.0
查看信息
- 显示有变更的文件
- git status
- 显示当前分支的版本历史
- git log
- git log —oneline
- 显示commit历史,以及每次commit发生变更的文件
- git log —stat
- 查看分支合并图
- git log —graph
- 显示所有提交过的用户,按提交次数排序
- git shortlog -sn
- 显示指定文件是什么人在什么时间修改过
- git blame [file]
- 显示今天你写了多少行代码
- git diff —shortstat “@{0 day ago}”
- 显示某次提交的元数据和内容变化
- git show [commit]
- 将本地分支推动到远程分支
- git push origin feature-branch:feature-branch //推送本地的feature-branch(冒号前面的)分支到远程origin的feature-branch(冒号后面的)分支(没有会自动创建)
- 把远程分支拉到本地
- git fetch origin dev(dev为远程仓库的分支名)
- 查看提交线
- git log —graph —pretty=oneline —abbrev-commit
- 统计个人代码量
- 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 }’ -
- 查看排名前5的贡献者
- git log —pretty=’%aN’ | sort | uniq -c | sort -k1 -n -r | head -n 5
奇淫技巧
- git fetch —all && git reset —hard origin/master
- git fetch —all && git reset —hard origin/master
- 展示本地仓库中任意两个 commit 之间的文件变动:
- git diff
- git diff
- 输出暂存区和本地最近的版本 (commit) 的 different (不同)
- git diff —cached
- 输出工作区、暂存区 和本地最近的版本 (commit) 的 different (不同)。
- git diff HEAD
- 快速切换到上一个分支
- git checkout -
- 删除已经合并到 master 的分支
- git branch —merged master | grep -v ‘^*| master’ | xargs -n 1 git branch -d
- 关联远程仓库(都行)
- git branch -u origin/mybranch
- git push origin/mybranch -u
- 重命名本地分支
- git branch -m
- git branch -m
- 放弃所有修改:
- git checkout .
- 以新增一个 commit 的方式还原某一个 commit 的修改
- git revert
- git revert
- 删除所有的stash
- git stash clear
- 配置多个remote(方便从不同的分支上拉取)
- git remote add originname1 https://origin1.com/project.git
- git remote add originname2 https://origin2.com/project.git
- 拉取远程fork到本地 git pull originname2 master(远程分支)
- 统计某人代码提交量
- 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 }’ -
- 统计所有人代码提交量
- 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=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
- 查看git提交前5名
- 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个字符。
多次提交合并
参考