1、git init
创建初始化仓库
git init [-q | --quiet] [--bare] [--template=<template_directory>]
[--separate-git-dir <git dir>] [--object-format=<format>]
[-b <branch-name> | --initial-branch=<branch-name>]
[--shared[=<permissions>]] [directory]
详细参数如下:
-q
仅打印错误和警告消息;所有其他输出将不会显示。
--bare
创建一个裸仓库。它主要是只保存历史提交的版本信息,不保存文件。作用就是作为分享库。
--object-format=<format>
指定存储库的对象格式(哈希算法)。有效值为 sha1 和(如果启用)sha256。sha1 是默认值。
--template = <模板目录>
指定要使用模板的目录。
--separate-git-dir=<git目录>
-b <branch-name>
--initial-branch=<branch-name>
初始化仓库名称,若没有指定,则使用默认的master。
--shared[=(false|true|umask|group|all|world|everybody|0xxx)]
指定要共享的git存储库
2、git clone
将库克隆到目录
git clone [] [–] [
]
例子: git clone -b dev0330 httpxxxxxxxx /e/aaa/bbb
-o <名称>
--origin <名称>
不使用远程名称 origin 来跟踪上游存储库,而使用 <名称>。
-b <名称>
--branch <名称>
克隆指定分支
3、git add
添加内容到索引
-f
--force
允许添加已被忽略的文件。
-i 交互式暂存
*** Commands ***
1: status 2: update 3: revert 4: add untracked
5: patch 6: diff 7: quit 8: help
1、状态
2、将已经在暂存区的文件但修改的文件再次放入到暂存区
3、从暂存区删除
4、将未放入暂存区的文件加入到暂存区
5、按照脚本提示进行文件操作
6、文件差异
4、git status
显示工作树状态
-s
--short
以简短的形式给出输出。
-b
--branch
即使在短文中也要显示分支和跟踪信息。
5、git restore
取消暂存区的文件
git restore --staged <file> 把文件从暂存区撤回到工作区,保留文件最后一次修改的内容;
git restore 会撤销文件的修改,使文件恢复到暂存区或本地代码库(取决于文件在修改前的状态);
6、git diff
比较差异,可比较分支差异,commit差异等
默认比较的是 本地与暂存区的差异,也就是本地与git add 的文件的差异
git diff [<options>] [<commit>] [--] [<path>...]
比较某次提交和HEAD差异
git diff [<options>] --cached [<commit>] [--] [<path>...]
比较暂存区与仓库区差异
xxx xxx 直接比较两个分支(commit等)的差异
xxx..xxx 同上
xxx...xxx 比较的是从共同祖先分歧后的变化
7、git log
7.1、参数说明
git log A B 展示AB所有的提交
git log A..B 显示在B,但是不在A上的 等同于git log ^refA refB或git log refB --not refA
git log A...B 显示不共享的提交,也就是从共同祖先分歧后得提交
git log refA refB ^refC 在azaib但是不在c等同于 git log refA refB --not refC
git log --left-right master...experiment 显示每个提交到底处于哪一侧的分支
-p 按补丁格式显示每个更新之间的差异
--pretty 内容格式化
--date 日期格式化
--stat 显示每次更新的文件修改统计信息
--shortstat 只显示 --stat 中最后的行数修改添加移除统计
--name-only 仅显示已修改的文件清单
--name-status 显示新增、修改、删除的文件清单
--abbrev-commit 仅显示 SHA-1 的前9个字符,而非所有的 40 个字符
--relative-date 使用较短的相对时间显示(比如,“2 days ago”)
--graph 显示 ASCII 图形表示的分支合并历史
--since/after 仅显示指定时间之后的提交
--until/before 仅显示指定时间之前的提交
>git log --since=2.weeks
>git log --after="2020-01-01"
>git log --since ==2019-12-01 --until=2020-01-01
--author 仅显示作者匹配指定字符串的提交。
--committer 仅显示提交者匹配指定字符串的提交。
--grep 仅显示提交说明中包含指定字符串的提交。
--grep-reflog 正则筛选
>git log --grep="xxx" -i
-i 忽略大小写
-E 扩展正则表达式
-F 将限制模式视为固定的字符串
-P 将限制模式视为与Perl兼容的正则表达式
-20 最近二十次提交记录,无则表示导出所有记录到log.txt
7.2、pretty参数说明
git log --pretty=oneline 一行格式(SHA-1+提交信息)
git log --pretty=short 短格式(SHA-1+作者+日期+提交信息)
git log --pretty=full 长格式(SHA-1+作者+提交者+提交日期+提交信息)
git log --pretty=fuller 长格式(SHA-1+作者+作者提交日期+提交者+提交者提交日期+提交信息)
7.3、git log --pretty=format常用选项
%H 提交的完整哈希值
%h 提交的简写哈希值
%T 树的完整哈希值
%t 树的简写哈希值
%P 父提交的完整哈希值
%p 父提交的简写哈希值
%an 作者名字
%ae 作者的电子邮件地址
%ad 作者修订日期(可以用 --date=选项 来定制格式)
%ar 作者修订日期,按多久以前的方式显示
%cn 提交者的名字
%ce 提交者的电子邮件地址
%cd 提交日期
%cr 提交日期(距今多长时间)
%s 提交说明
8、git commit
--amend 本次提交覆盖上此提交
9、git branch
-vv 查看本地对应的远程分支信息
-a, --all 显示本地以及远程仓库所有分支
-d, --delete 删除完全合并的分支
-D 删除分支(即使没有合并)
-m, --move 移动/重命名分支及其引用日志
-M 移动/重命名分支,即使目标存在
-c, --copy 复制一个分支和它的 reflog
-C 复制一个分支,即使目标存在
-l, --list 列出分支名称
--show-current 显示当前分支名称
--create-reflog 创建分支的 reflog
--edit-description 编辑分支的描述
-f, --force 强制创建、移动/重命名、删除
--merged <commit> 只打印合并的分支
--no-merged <commit> 只打印未合并的分支
--column[=<style>] 在列中列出分支
--sort <key> 要排序的字段名
--points-at <object> 只打印对象的分支
-i, --ignore-case 排序和过滤不区分大小写
--format <format> 用于输出的格式
10、git push
-d, --delete 删除引用 例子 git push -d origin/dev 删除远程仓库的dev分支
-f, --force 强制更新
-u, --set-upstream 设置上游
--all 推送所有引用
11、git pull
-r, --rebase 通过变基而不是合并来合并更改
-n 在合并结束时不显示 diffstat
--stat 在合并结束时显示 diffstat
--commit 如果合并成功则执行提交(默认)
12、git stash
贮藏与清理
git stash list 展示贮藏列表
git stash apply 恢复工作区的文件
git stash apply --index 除了恢复工作区的文件外,还尝试恢复暂存区。
git stash clear 清除贮藏列表
git stash pop 与apply类似,但是会删除贮藏区的该条
git stash drop 删除贮藏区某条
git stash show xxx 展示贮藏区内容
-u/--include-untracked 贮藏未跟踪的文件
--patch 进入脚本模式,按照提示操作
13、git rebase
变基,线性合并分支
--onto 例子:git rebase --onto master server client 取出 client 分支,找出它从 server 分支分歧之后的补丁, 然后把这些补丁在 master 分支上重放一遍,让 client 看起来像直接基于 master 修改一样
11.1、git rebase -i 【commit】 交互式修改提交内容
说明:假如说你要修改前三次提交,你需要将commit指向前三次提交的父提交,也就是第四次提交。也可以使用HEAD~3
输入命令后会进入交互式命令界面:
合并提交用法:合并310154e和a5f4a0d到f7f3f6d中,注意!!可能会出现冲突。
pick f7f3f6d changed my name a bit
squash 310154e updated README formatting and added blame
squash a5f4a0d added cat-file
修改提交信息用法:修改310154e和a5f4a0d提交信息
pick f7f3f6d changed my name a bit
r 310154e updated README formatting and added blame
r a5f4a0d added cat-file
14、git reset
重置,若带文件路径如:git reset xxx.txt 则不会移动HEAD,只会覆盖对应的文件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2vdqJjw3-1650163037071)(C:\Users\ZhaLeMaoDeMao\AppData\Roaming\Typora\typora-user-images\image-20220415165759431.png)]
-q, --quiet be quiet, only report errors
--mixed reset HEAD and index 重置HEAD和暂存区
--soft reset only HEAD 仅仅重置HEAD
--hard reset HEAD, index and working tree 强制重置HEAD和暂存区和工作区
--merge reset HEAD, index and working tree 重置HEAD和暂存区和工作区
--keep reset HEAD but keep local changes 重置HEAD,但是保持本地的改变
--recurse-submodules[=<reset>]
control recursive updating of submodules
-p, --patch select hunks interactively交互式的执行
-N, --intent-to-add record only the fact that removed paths will be added later
--pathspec-from-file <file>
read pathspec from file
--pathspec-file-nul with --pathspec-from-file, pathspec elements are separated with NUL character
15、git revert
撤销某次提交,产生一次新的提交,当然也可以回退到某个版本产生新的提交。
-n, --no-commit 不自动提交
-e, --edit 编辑提交信息
-m, --mainline <父编号> 选择主线父级 解释:父编号也就是1 2 1代表原始父亲,2是分支父亲如下图所示:
D
|\
| \
C |(dev)
| B
| |
| |
| /
A(master)
git revert -m 1 C 也就是去除了dev的B提交,反之git revert -m 2 B 去除了C的提交
用法一:git revert A 直接撤销该次commit的提交,可能会有冲突,注意只撤销该次的提交不影响前后。
用法二:git revert A..C 撤销 A到C的提交(左开右闭),其实就是撤销B和C的提交,
可用于回退版本如git revert A.. 等同于A..HEAD,回退到版本A,并保留了B C的提交区别于reset
|