Git 常用指令笔记
在实际使用 Git
进行开发的过程中,比较常用的一些指令笔记
基本概念
英文 | 中文 |
---|---|
working tree |
工作区 |
stage/index |
暂存区 |
origin |
远程、源 |
tag |
标签 |
mainline |
主线 |
git-log
Show commit logs
展示提交日志
命令 | 描述 |
---|---|
git log --graph --oneline --all |
以图表和单行的形式展示所有提交日志 |
git log --grep=<pattern> |
通过关键字搜索提交日志 |
git log --author=username --oneline | wc -l |
指定作者的提交次数 |
指定作者的代码量
git log --author=username --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-commit
Record changes to the repository
向仓库提交改动
命令 | 描述 |
---|---|
-n, --no-verify |
该选项可以避免执行 pre-commit 和 commit-msg 钩子 |
git-show
Show various types of objects
展示不同种类对象
命令 | 描述 |
---|---|
git show <commit> |
展示指定提交的详情 |
git show <commit> --stat |
仅展示指定提交的改动文件 |
git-tag
Create, list, delete or verify a tag object signed with GPG
创建,列举或者删除标签
命令 | 描述 |
---|---|
git tag -a [tagname] -m [msg] |
创建标签并添加信息 |
git tag -l |
列出本地标签 |
git tag --list 'v-*' |
列出符合'v-*' 模式的标签 |
git tag -d [tagname] |
删除本地标签 |
git push --tags |
向远程推送所有本地标签 |
git push origin :refs/tags/[tagname] |
删除远程标签 |
git-stash
Stash the changes in a dirty working directory away
把工作空间中所有暂存和非暂存的改动隐藏起来
命令 | 描述 |
---|---|
git stash |
快速隐藏 |
git stash push [-m <message>] [--] [<pathspec>…] |
添加备注并指定路径 |
git stash list |
以列表的形式展示 |
git stash pop [<stash>] |
把栈顶的改动应用到本地,并删除栈顶 |
git stash apply [<stash>] |
把栈顶的改动应用到本地 |
git stash clear |
删除远程标签 |
git-clean
Remove untracked files from the working tree
从工作区中删除未跟踪的文件
命令 | 描述 |
---|---|
git clean [-d] [-f] |
删除指令 |
-d |
递归地删除目录和目录下包含的所有目录和文件 |
-f, --force |
如果不添加该选项,git clean 会没有删除文件和目录的权限 |
git-cherry-pick
Apply the changes introduced by some existing commits
通过引进已存在的提交应用新的改动
俗称:拷贝提交
命令 | 描述 |
---|---|
git cherry-pick <commit> |
拷贝一个提交 |
git cherry-pick --strategy=recursive --strategy-option=theirs <commit> |
以该次提交的版本解决冲突 |
git-revert
Revert some existing commits
撤销已经存在的提交
通过创建新的提交,去撤销已经存在的提交
命令 | 描述 |
---|---|
git revert [commit] |
撤销一个已经存在的提交 |
-n, --no-commit |
不创建新的提交,直接把撤销后的代码添加到工作区和暂存区 |
git revert [start-commit]..[end-commit]
撤销指定区间的提交,前开后闭,不包括[start-commit]
,包括[end-commit]
git revert -m 1 [merge-commit]
--mainline parent-number
通过指定主线撤销合并,parent-number
以 1
开始,通过git show [merge-commit]
查看
git-reset
Reset current HEAD to the specified state
把当前 HEAD 设置为指定的状态
将 指定分支[branchName]
所指向的 commit id 设置为当前 HEAD 所指向的 commit id
git checkout [branchName]
git reset --hard [<commit>]
git-rebase
Reapply commits on top of another base tip
把多个提交应用到另一个基础点的顶部
合并多个commit为一个完整commit
git rebase -i [startpoint] [endpoint]
-i
即--interactive
,即弹出交互式的界面让用户编辑完成合并操作[startpoint] [endpoint]
则指定了一个编辑区间,如果不指定[endpoint]
,则该区间的终点默认是当前分支HEAD
所指向的commit(注:该区间指定的是一个前开后闭的区间)
将某一部分 commit 复制到另一个分支
git rebase [startpoint] [endpoint] --onto [branchName]
git-update-index
Register file contents in the working tree to the index
命令 | 描述 |
---|---|
git update-index [--[no-]assume-unchanged] [--] [<file>...] |
假定指定的文件为未更改的状态 |
git ls-files -v |
查看被假定为未更改状态的文件 |
参考文档
- Git Documentation
- Git使用教程:最详细、最傻瓜、最浅显、真正手把手教!
- 让你的git拥有不同身份
- DrVanScott/git-clone-init
- Git alias 别名推荐配置