1 分钟阅读

在实际使用 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-commitcommit-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-number1 开始,通过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 查看被假定为未更改状态的文件

参考文档

TODOS

标签:

分类:

更新时间: