git用法

时间:2021-05-10 15:49:42

chapter: 8 add 添加文件内容至索引

用法:git add [选项] [--] <路径匹配>...

-n, --dry-run         演习
-v, --verbose 冗长输出 -i, --interactive 交互式拣选
-p, --patch 交互式挑选数据块
-e, --edit 编辑当前差异并应用
-f, --force 允许添加忽略的文件
-u, --update 更新已跟踪的文件
-N, --intent-to-add 只记录,该路径稍后再添加
-A, --all 添加所有改变的已跟踪文件和未跟踪文件
--ignore-removal 忽略工作区中移除的路径(和 --no-all 相同)
--refresh 不添加,只刷新索引
--ignore-errors 跳过因出错不能添加的文件
--ignore-missing 检查在演习模式下文件(即使不存在)是否被忽略

chapter: 9 bisect 通过二分查找定位引入 bug 的变更

usage: git bisect [help|start|bad|good|skip|next|reset|visualize|replay|log|run]

git bisect help
print this long help message.
git bisect start [--no-checkout] [<bad> [<good>...]] [--] [<pathspec>...]
reset bisect state and start bisection.
git bisect bad [<rev>]
mark <rev> a known-bad revision.
git bisect good [<rev>...]
mark <rev>... known-good revisions.
git bisect skip [(<rev>|<range>)...]
mark <rev>... untestable revisions.
git bisect next
find next bisection to test and check it out.
git bisect reset [<commit>]
finish bisection search and go back to commit.
git bisect visualize
show bisect status in gitk.
git bisect replay <logfile>
replay bisection log.
git bisect log
show bisect log.
git bisect run <cmd>...
use <cmd>... to automatically bisect. Please use "git help bisect" to get the full man page.

chapter: 10 branch 列出、创建或删除分支

用法:git branch [选项] [-r | -a] [--merged | --no-merged]

或:git branch [选项] [-l] [-f] <分支名> [<起始点>]

或:git branch [选项] [-r] (-d | -D) <分支名>...

或:git branch [选项] (-m | -M) [<旧分支>] <新分支>

通用选项

-v, --verbose 显示哈希值和主题,若参数出现两次则显示上游分支

-q, --quiet 不显示信息

-t, --track 设置跟踪模式(参见 git-pull(1))

--set-upstream 改变上游信息

-u, --set-upstream-to

change the upstream info

--unset-upstream Unset the upstream info

--color[=<何时>] 使用彩色输出

-r, --remotes 作用于远程跟踪分支

--contains <提交> 只打印包含该提交的分支

--abbrev[=] 用 位数字显示 SHA-1 哈希值

具体的 git-branch 动作:

-a, --all 列出远程跟踪及本地分支

-d, --delete 删除完全合并的分支

-D 删除分支(即使没有合并)

-m, --move 移动/重命名一个分支,以及它的引用日志

-M 移动/重命名一个分支,即使目标已存在

--list 列出分支名

-l, --create-reflog 创建分支的引用日志

--edit-description 标记分支的描述

-f, --force 强制创建(当已经存在)

--no-merged <提交> 只打印没有合并的分支

--merged <提交> 只打印合并的分支

--column[=<风格>] 以列的方式显示分支

chapter: 11 checkout 检出一个分支或路径到工作区

用法:git checkout [选项] <分支>

或:git checkout [选项] [<分支>] -- <文件>...

-q, --quiet           不显示进度报告
-b <分支> 创建并检出一个新的分支
-B <分支> 创建/重置并检出一个分支
-l 为新的分支创建引用日志
--detach 成为指向该提交的分离头指针
-t, --track 为新的分支设置上游信息
--orphan <新分支> 新的没有父提交的分支
-2, --ours 对尚未合并的文件检出我们的版本
-3, --theirs 对尚未合并的文件检出他们的版本
-f, --force 强制检出(丢弃本地修改)
-m, --merge 和新的分支执行三路合并
--overwrite-ignore 更新忽略的文件(默认)
--conflict <风格> 冲突输出风格(merge 或 diff3)
-p, --patch 交互式挑选数据块
--ignore-skip-worktree-bits
对路径不做稀疏检出的限制

chapter: 12 clone 克隆一个版本库到一个新目录

用法:git clone [选项] [--] <版本库> [<路径>]

-v, --verbose         更加详细
-q, --quiet 更加安静
--progress 强制显示进度报告
-n, --no-checkout 不创建一个检出
--bare 创建一个裸版本库
--mirror 创建一个镜像版本库(也是裸版本库)
-l, --local 从本地版本库克隆
--no-hardlinks 不使用本地硬链接,始终复制
-s, --shared 设置为共享版本库
--recursive 在克隆时初始化子模组
--recurse-submodules 在克隆时初始化子模组
--template <模板目录>
模板目录将被使用
--reference <版本库> 引用版本库
-o, --origin <名称> 使用<名称>而不是 'origin' 去跟踪上游
-b, --branch <分支> 检出<分支>而不是远程HEAD
-u, --upload-pack <路径>
远程 git-upload-pack 路径
--depth <深度> 创建一个指定深度的浅克隆
--single-branch 只克隆一个分支、HEAD 或 --branch
--separate-git-dir <git目录>
git目录和工作区分离
-c, --config <key=value>
在新版本库中设置配置信息

chapter: 13 commit 记录变更到版本库

用法:git commit [选项] [--] <路径匹配>...

-q, --quiet           提交成功后不显示概述信息
-v, --verbose 在提交说明模板里显示差异

提交说明选项

-F, --file <文件> 从文件中读取提交说明

--author <作者> 提交时覆盖作者

--date <日期> 提交时覆盖日期

-m, --message <说明> 提交说明

-c, --reedit-message <提交>

重用并编辑指定提交的提交说明

-C, --reuse-message <提交>

重用指定提交的提交说明

--fixup <提交> 使用 autosquash 格式的提交说明用以修正指定的提交

--squash <提交> 使用 autosquash 格式的提交说明用以压缩至指定的提交

--reset-author 现在将该提交的作者改为我(和 -C/-c/--amend 参数共用)

-s, --signoff 添加 Signed-off-by: 签名

-t, --template <文件>

使用指定的模板文件

-e, --edit 强制编辑提交

--cleanup 设置如何删除提交说明里的空格和#注释

--status 在提交说明模板里包含状态信息

-S, --gpg-sign[=]

GPG 提交签名

提交内容选项

-a, --all 提交所有改动的文件

-i, --include 添加指定的文件到索引区等待提交

--interactive 交互式添加文件

-p, --patch 交互式添加变更

-o, --only 只提交指定的文件

-n, --no-verify 绕过 pre-commit 钩子

--dry-run 显示将要提交的内容

--short 以简洁的格式显示状态

--branch 显示分支信息

--porcelain 机器可读的输出

--long 以长格式显示状态(默认)

-z, --null 条目以NUL字符结尾

--amend 修改先前的提交

--no-post-rewrite 绕过 post-rewrite 钩子

-u, --untracked-files[=<模式>]

显示未跟踪的文件,“模式”的可选参数:all、normal、no。(默认:all)

chapter: 14 diff 显示提交之间、提交和工作区之间等的差异

usage: git diff [--no-index]

chapter: 15 fetch 从另外一个版本库下载对象和引用

用法:git fetch [<选项>] [<版本库> [<引用表达式>...]]

或:git fetch [<选项>] <组>

或:git fetch --multiple [<选项>] [(<版本库> | <组>)...]

或:git fetch --all [<选项>]

-v, --verbose         更加详细
-q, --quiet 更加安静
--all 从所有的远程抓取
-a, --append 追加到 .git/FETCH_HEAD 而不是覆盖它
--upload-pack <路径> 上传包到远程的路径
-f, --force 强制覆盖本地分支
-m, --multiple 从多个远程抓取
-t, --tags 抓取所有的 tags 和关联对象
-n 不抓取任何 tags (--no-tags)
-p, --prune 清除远程已经不存在的分支的跟踪分支
--recurse-submodules[=<on-demand>]
控制子模组的递归抓取
--dry-run 演习
-k, --keep 保持下载包
-u, --update-head-ok 允许更新 HEAD 引用
--progress 强制显示进度报告
--depth <深度> 深化浅克隆的历史
--unshallow 转换为一个完整的版本库

chapter: 16 grep 输出和模式匹配的行

用法:git grep [选项] [-e] <模式> [<修订>...] [[--] <路径>...]

--cached              在索引区搜索而不是在工作区
--no-index 在未被 git 管理的内容中查找
--untracked 在跟踪和未跟踪的文件中搜索
--exclude-standard 也在忽略的文件中搜索 -v, --invert-match 显示未匹配的行
-i, --ignore-case 不区分大小写匹配
-w, --word-regexp 只在单词边界匹配模式
-a, --text 把二进制文件当做文本处理
-I 不在二进制文件中匹配模式
--max-depth <深度> 最多以指定的深度向下寻找 -E, --extended-regexp
使用扩展的 POSIX 正则表达式
-G, --basic-regexp 使用基本的 POSIX 正则表达式(默认)
-F, --fixed-strings 把模式解析为固定的字符串
-P, --perl-regexp 使用 Perl 兼容的正则表达式 -n, --line-number 显示行号
-h 不显示文件名
-H 显示文件名
--full-name 显示相对于*目录的文件名
-l, --files-with-matches
只显示文件名而不显示匹配的行
--name-only 和 --files-with-matches 同义
-L, --files-without-match
只显示未匹配的文件名
-z, --null 在文件名后输出 NUL 字符
-c, --count 显示总匹配行数,而不显示匹配的行
--color[=<何时>] 高亮显示匹配项
--break 在不同文件的匹配项之间打印空行
--heading 只在同一文件的匹配项的上面显示一次文件名 -C, --context <n> 显示匹配项前后的 <n> 行上下文
-B, --before-context <n>
显示匹配项前 <n> 行上下文
-A, --after-context <n>
显示匹配项后 <n> 行上下文
-数字 快捷键 -C 数字
-p, --show-function 在匹配的前面显示一行函数名
-W, --function-context
显示所在函数的前后内容 -f <文件> 从文件读取模式
-e <模式> 匹配 <模式>
--and 组合用 -e 参数设定的模式
--or
--not
(
)
-q, --quiet 不输出,而用退出码标识命中状态
--all-match 只显示匹配所有模式的文件中的匹配 -O, --open-files-in-pager[=<分页>]
分页显示匹配的文件
--ext-grep 允许调用 grep(1)(本次构建忽略)

chapter: 17 init 创建一个空的 Git 版本库或重新初始化一个已存在的版本库

用法:git init [-q | --quiet] [--bare] [--template=<模板目录>] [--shared[=<权限>]] [目录]

--template <模板目录>
模板目录将被使用
--bare 创建一个裸版本库
--shared[=<权限>] 指定 git 版本库是多个用户之间共享的
-q, --quiet 保持安静
--separate-git-dir <git目录>
git目录和工作区分离

chapter: 18 log 显示提交日志

用法:git log [] [] [[--] ...]

or: git show [options] ...

--quiet               不显示差异输出
--source 显示源
--use-mailmap 使用邮件映射文件
--decorate[=...] 修饰选项

chapter: 19 merge 合并两个或更多开发历史

用法:git merge [选项] [<提交>...]

或:git merge [选项] <说明> HEAD <提交>

或:git merge --abort

-n                    在合并的最后不显示差异统计
--stat 在合并的最后显示差异统计
--summary (和 --stat 同义)
--log[=<n>] 在合并提交信息中添加(最多 <n> 条)精简提交记录
--squash 创建一个单独的提交而不是做一次合并
--commit 如果合并成功,执行一次提交(默认)
-e, --edit 在提交前编辑提交说明
--ff 允许快进(默认)
--ff-only 如果不能快进就放弃合并
--rerere-autoupdate update the index with reused conflict resolution if possible
--verify-signatures 验证指定的提交是否包含一个有效的 GPG 签名
-s, --strategy <策略>
要使用的合并策略
-X, --strategy-option <option=value>
所选的合并策略的选项
-m, --message <说明> 合并的提交说明(针对非快进式合并)
-v, --verbose 更加详细
-q, --quiet 更加安静
--abort 放弃当前正在进行的合并
--progress 强制显示进度报告
-S, --gpg-sign[=<key id>]
GPG 提交签名
--overwrite-ignore 更新忽略的文件(默认)

chapter: 20 mv 移动或重命名一个文件、目录或符号链接

用法:git mv [选项] <源>... <目标>

-v, --verbose         冗长输出
-n, --dry-run 演习
-f, --force 强制移动/重命令,即使目标存在
-k 跳过移动/重命名错误

chapter: 21 pull 获取并合并另外的版本库或一个本地分支

usage: git pull [-n | --no-stat] [--[no-]commit] [--[no-]squash] [--[no-]ff] [-s strategy]... [] ...

Fetch one or more remote refs and merge it/them into the current HEAD.

chapter: 22 push 更新远程引用和相关的对象

用法:git push [<选项>] [<版本库> [<引用表达式>...]]

-v, --verbose         更加详细
-q, --quiet 更加安静
--repo <版本库> 版本库
--all 推送所有引用
--mirror 镜像所有引用
--delete 删除引用
--tags 推送 tags(不能使用 --all or --mirror)
-n, --dry-run 演习
--porcelain 机器可读的输出
-f, --force 强制更新
--recurse-submodules[=<检查>]
控制子模组的递归推送
--thin 使用精简打包
--receive-pack <receive-pack>
接收包程序
--exec <receive-pack>
接收包程序
-u, --set-upstream 设置 git pull/status 的上游
--progress 强制显示进度报告
--prune 清除本地删除的引用
--no-verify 绕过 pre-push 钩子
--follow-tags 推送缺失的有关的 tags

chapter: 23 rebase 本地提交转移至更新后的上游分支中

用法:git rebase [-i] [options] [--exec ] [--onto ] [] []

或:git rebase [-i] [options] [--exec ] [--onto ] --root []

或:git-rebase --continue | --abort | --skip | --edit-todo

Available options are

-v, --verbose display a diffstat of what changed upstream

-q, --quiet be quiet. implies --no-stat

--onto ... rebase onto given branch instead of upstream

-p, --preserve-merges

try to recreate merges instead of ignoring them

-s, --strategy ... use the given merge strategy

--no-ff cherry-pick all commits, even if unchanged

-m, --merge use merging strategies to rebase

-i, --interactive let the user edit the list of commits to rebase

-x, --exec ... add exec lines after each commit of the editable list

-k, --keep-empty preserve empty commits during rebase

-f, --force-rebase force rebase even if branch is up to date

-X, --strategy-option ...

pass the argument through to the merge strategy

--stat display a diffstat of what changed upstream

-n, --no-stat do not show diffstat of what changed upstream

--verify allow pre-rebase hook to run

--rerere-autoupdate allow rerere to update index with resolved conflicts

--root rebase all reachable commits up to the root(s)

--autosquash move commits that begin with squash!/fixup! under -i

--committer-date-is-author-date

passed to 'git am'

--ignore-date passed to 'git am'

--whitespace ... passed to 'git apply'

--ignore-whitespace passed to 'git apply'

-C ... passed to 'git apply'

Actions:

--continue continue

--abort abort and check out the original branch

--skip skip current patch and continue

--edit-todo edit the todo list during an interactive rebase

chapter: 24 reset 重置当前HEAD到指定状态

用法:git reset [--mixed | --soft | --hard | --merge | --keep] [-q] [<提交>]

或:git reset [-q] <树或提交> [--] <路径>...

或:git reset --patch [<树或提交>] [--] [<路径>...]

-q, --quiet           安静模式,只报告错误
--mixed 重置 HEAD 和索引
--soft 只重置 HEAD
--hard 重置 HEAD、索引和工作区
--merge 重置 HEAD、索引和工作区
--keep 重置 HEAD 但保存本地变更
-p, --patch 交互式挑选数据块

chapter: 25 rm 从工作区和索引中删除文件

用法:git rm [选项] [--] <文件>...

-n, --dry-run         演习
-q, --quiet 不列出删除的文件
--cached 只从索引区删除
-f, --force 忽略文件更新状态检查
-r 允许递归删除
--ignore-unmatch 即使没有匹配,也以零状态退出

chapter: 26 show 显示各种类型的对象

用法:git log [] [] [[--] ...]

or: git show [options] ...

--quiet               不显示差异输出
--source 显示源
--use-mailmap 使用邮件映射文件
--decorate[=...] 修饰选项

chapter: 27 status 显示工作区状态

用法:git status [选项] [--] <路径匹配>...

-v, --verbose         冗长输出
-s, --short 以简洁的格式显示状态
-b, --branch 显示分支信息
--porcelain 机器可读的输出
--long 以长格式显示状态(默认)
-z, --null 条目以NUL字符结尾
-u, --untracked-files[=<模式>]
显示未跟踪的文件,“模式”的可选参数:all、normal、no。(默认:all)
--ignored 显示忽略的文件
--ignore-submodules[=<何时>]
忽略子模组的更改,“何时”的可选参数:all、dirty、untracked。(默认:all)
--column[=<风格>] 以列的方式显示未跟踪的文件

chapter: 28 tag 创建、列出、删除或校验一个GPG签名的 tag 对象

用法:git tag [-a|-s|-u ] [-f] [-m <说明>|-F <文件>] <标签名> [<头>]

或:git tag -d <标签名>...

或:git tag -l [-n[]] [--contains <提交>] [--points-at <对象>]

[<模式>...]

或:git tag -v <标签名>...

-l, --list            列出tag名称
-n[<n>] 每个 tag 信息打印 <n> 行
-d, --delete 删除 tags
-v, --verify 验证 tags

Tag 创建选项

-a, --annotate 注解 tag,需要一个说明

-m, --message <说明> tag 说明

-F, --file <文件> 从文件中读取提交说明

-s, --sign 注解并 GPG 签名的 tag

--cleanup <模式> 设置如何删除提交说明里的空格和#注释

-u, --local-user

使用另外的私钥签名 tag

-f, --force 如果存在,替换现有的 tag

--column[=<风格>] 以列的方式显示 tag

Tag 列表选项

--contains <提交> 只打印包含提交的tags

--points-at <对象> 只打印tags对象

git --help|awk 'NR>7 && NR<29'|awk '{print "echo chapter:",NR,$0,";","git ",$1," -h"}' |sh