一、新建代码库

# git-init - 创建一个空的 Git 存储库或重新初始化一个现有的存储库

$ git init

# 在本地新建一个repo,进入一个项目目录,执行git init,会初始化一个repo,并在当前文件夹下创建一个.git文件夹.

$ git init [project-name]
$ git init repo # 下载一个项目和它的整个代码历史
# 用法:git clone [<选项>] [--] <仓库> [<路径>]

    -v, --verbose         #更加详细
-q, --quiet #更加安静
--progress #强制显示进度报告
-n, --no-checkout #不创建一个检出
--bare #创建一个纯仓库
--mirror #创建一个镜像仓库(也是纯仓库)
-l, --local #从本地仓库克隆
--no-hardlinks #不使用本地硬链接,始终复制
-s, --shared #设置为共享仓库
--recurse-submodules[=<路径规格>] #在克隆时初始化子模组
--recursive ... --recurse-submodules #别名
-j, --jobs <n> #并发克隆的子模组的数量
--template <模板目录> #模板目录将被使用
--reference <仓库> #参考仓库
--reference-if-able <仓库> #参考仓库
--dissociate #仅在克隆时参考 --reference 指向的本地仓库
-o, --origin <名称> #使用 <名称> 而不是 'origin' 去跟踪上游
-b, --branch <分支> #检出 <分支> 而不是远程 HEAD
-u, --upload-pack <路径> #远程 git-upload-pack 路径
--depth <深度> #创建一个指定深度的浅克隆
--shallow-since <时间> #从一个特定时间创建一个浅克隆
--shallow-exclude <版本>#深化浅克隆的历史,除了特定版本
--single-branch #只克隆一个分支、HEAD 或 --branch
--no-tags #不要克隆任何标签,并且后续获取操作也不下载它们
--shallow-submodules #子模组将以浅下载模式克隆
--separate-git-dir <git目录>#git目录和工作区分离
-c, --config <key=value>#在新仓库中设置配置信息
--server-option <server-specific>#传输选项
-4, --ipv4 #只使用 IPv4 地址
-6, --ipv6 #只使用 IPv6 地址
--filter <参数> #对象过滤
--remote-submodules #任何克隆的子模组将使用它们的远程跟踪分支
--sparse #初始化稀疏检出文件,只包含根目录文件
$ git clone [url]

#clone下来的repo会以url最后一个斜线后面的名称命名,创建一个文件夹,如果想要指定特定的名称,可以git clone [url] newname指定.

$ git clone [url] newname

更多操作命令参数--不常用

git init [-q | --quiet] [--bare] [--template=<template-directory>] [--shared[=<permissions>]][<directory>]

#将使用模板的目录/ directory from which templates will be used

    --template <template-directory>

#创建一个空仓库/create a bare repository

    --bare

#指定 git 存储库将在多个用户之间共享/specify that the git repository is to be shared amongst several users

    --shared[=<permissions>]

#安静/be quiet

    -q, --quiet

#将 git dir 与工作树分开/separate git dir from working tree

    --separate-git-dir <gitdir>

#覆盖初始分支的名称/override the name of the initial branch

    -b, --initial-branch <name>

#指定要使用的哈希算法/specify the hash algorithm to use

    --object-format <hash>

二、配置

#用法:git config [<选项>]

#配置文件位置
--global #使用全局配置文件
--system #使用系统级配置文件
--local #使用仓库级配置文件
--worktree #使用工作区级别的配置文件
-f, --file <文件> #使用指定的配置文件
--blob <数据对象 ID> #从给定的数据对象读取配置 #操作
--get #获取值:name [value-regex]
--get-all #获得所有的值:key [value-regex]
--get-regexp #根据正则表达式获得值:name-regex [value-regex]
--get-urlmatch #获得 URL 取值:section[.var] URL
--replace-all #替换所有匹配的变量:name value [value_regex]
--add #添加一个新的变量:name value
--unset #删除一个变量:name [value-regex]
--unset-all #删除所有匹配项:name [value-regex]
--rename-section #重命名小节:old-name new-name
--remove-section #删除一个小节:name
-l, --list #列出所有
-e, --edit #打开一个编辑器
--get-color #获得配置的颜色:配置 [默认]
--get-colorbool #获得颜色设置:配置 [stdout-is-tty] #类型
-t, --type <> #取值为该类型
--bool #值是 "true" 或 "false"
--int #值是十进制数
--bool-or-int #值是 --bool or --int
--path #值是一个路径(文件或目录名)
--expiry-date #值是一个到期日期 #其它
-z, --null #终止值是 NUL 字节
--name-only #只显示变量名
--includes #查询时参照 include 指令递归查找
--show-origin #显示配置的来源(文件、标准输入、数据对象,或命令行)
--show-scope #显示配置的作用域(工作区、本地、全局、系统、命令)
--default <取值> #使用 --get 参数,当缺少设置时使用默认值
#Git的设置文件为.gitconfig,它可以在用户主目录下(全局配置),也可以在项目目录下(项目配置)。

# 显示当前的Git配置
$ git config --list # 编辑Git配置文件 $ git config -e --global # 设置提交代码时的用户信息 $ git config --global user.name "[name]" $ git config --global user.email "[email address]"

三、增加/删除文件

#用法:git add [<选项>] [--] <路径规格>...

    -n, --dry-run         #演习
-v, --verbose #冗长输出 -i, --interactive #交互式拣选
-p, --patch #交互式挑选数据块
-e, --edit #编辑当前差异并应用
-f, --force #允许添加忽略的文件
-u, --update #更新已跟踪的文件
--renormalize #对已跟踪文件(暗含 -u)重新归一换行符
-N, --intent-to-add #只记录,该路径稍后再添加
-A, --all #添加所有改变的已跟踪文件和未跟踪文件
--ignore-removal #忽略工作区中移除的路径(和 --no-all 相同)
--refresh #不添加,只刷新索引
--ignore-errors #跳过因出错不能添加的文件
--ignore-missing #检查在演习模式下文件(即使不存在)是否被忽略
--chmod (+|-)x #覆盖列表里文件的可执行位
--pathspec-from-file <文件> #从文件读取路径表达式
--pathspec-file-nul #使用 --pathspec-from-file,路径表达式用空字符分隔
# 添加指定文件到暂存区

$ git add [file1] [file2] ...

# 添加指定目录到暂存区,包括子目录

$ git add [dir]

# 添加当前目录的所有文件到暂存区,会递归地添加当前工作目录中的所有文件.

$ git add .

# 添加每个变化前,都会要求确认

# 对于同一个文件的多处变化,可以实现分次提交

$ git add -p
#用法:git rm [<选项>] [--] <文件>...
-n, --dry-run #演习
-q, --quiet #不列出删除的文件
--cached #只从索引区删除
-f, --force #忽略文件更新状态检查
-r #允许递归删除
--ignore-unmatch #即使没有匹配,也以零状态退出
--pathspec-from-file <文件> #从文件读取路径表达式
--pathspec-file-nul #使用 --pathspec-from-file,路径表达式用空字符分隔
# 删除工作区文件,并且将这次删除放入暂存区

$ git rm [file1] [file2] ...

# 停止追踪指定文件,但该文件会保留在工作区

$ git rm --cached [file]

# 改名文件,并且将这个改名放入暂存区
#用法:git mv [<选项>] <源>... <目标>

    -v, --verbose         #冗长输出
-n, --dry-run #演习
-f, --force #强制移动/重命令,即使目标存在
-k #跳过移动/重命名错误
$ git mv [file -original] [file -renamed ="token punctuation"]

#从工作目录中移除没有追踪的文件.
$ git clean -df #-d表示同时移除目录,-f表示force,因为在git的配置文件中,clean.requireForce=true,如果不加-f,clean将会拒绝执行.
#用法:git clean [-d] [-f] [-i] [-n] [-q] [-e <模式>] [-x | -X] [--] <路径>...
-q, --quiet #不打印删除文件的名称
-n, --dry-run #演习
-f, --force #强制
-i, --interactive #交互式清除
-d #删除整个目录
-e, --exclude <模式> #添加 <模式> 到忽略规则
-x #也删除忽略的文件
-X #只删除忽略的文件

四、代码提交

用法: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[=<key-id>]
GPG 提交签名 提交内容选项
-a, --all 提交所有改动的文件
-i, --include 添加指定的文件到索引区等待提交
--interactive 交互式添加文件
-p, --patch 交互式添加变更
-o, --only 只提交指定的文件
-n, --no-verify 绕过 pre-commit 和 commit-msg 钩子
--dry-run 显示将要提交的内容
--short 以简洁的格式显示状态
--branch 显示分支信息
--ahead-behind 计算完整的领先/落后值
--porcelain 机器可读的输出
--long 以长格式显示状态(默认)
-z, --null 条目以 NUL 字符结尾
--amend 修改先前的提交
--no-post-rewrite 绕过 post-rewrite 钩子
-u, --untracked-files[=<模式>]
显示未跟踪的文件,“模式”的可选参数:all、normal、no。(默认:all)
--pathspec-from-file <文件>
从文件读取路径表达式
--pathspec-file-nul 使用 --pathspec-from-file,路径表达式用空字符分隔
# 提交暂存区到仓库区

$ git commit -m [message]

# 提交暂存区的指定文件到仓库区

$ git commit [file1] [file2] ... -m [message]

# 提交工作区自上次commit之后的变化,直接到仓库区

$ git commit -a

# 提交时显示所有diff信息

$ git commit -v

# 使用一次新的commit,替代上一次提交

# 如果代码没有任何新变化,则用来改写上一次commit的提交信息

$ git commit --amend -m [message]

# 重做上一次commit,并包括指定文件的新变化

$ git commit --amend [file1] [file2] ...

五、分支

用法:git branch [<选项>] [-r | -a] [--merged | --no-merged]
或:git branch [<选项>] [-l] [-f] <分支名> [<起始点>]
或:git branch [<选项>] [-r] (-d | -D) <分支名>...
或:git branch [<选项>] (-m | -M) [<旧分支>] <新分支>
或:git branch [<选项>] (-c | -C) [<老分支>] <新分支>
或:git branch [<选项>] [-r | -a] [--points-at]
或:git branch [<选项>] [-r | -a] [--format] 通用选项
-v, --verbose 显示哈希值和主题,若参数出现两次则显示上游分支
-q, --quiet 不显示信息
-t, --track 设置跟踪模式(参见 git-pull(1))
-u, --set-upstream-to <上游>
改变上游信息
--unset-upstream 取消上游信息的设置
--color[=<何时>] 使用彩色输出
-r, --remotes 作用于远程跟踪分支
--contains <提交> 只打印包含该提交的分支
--no-contains <提交> 只打印不包含该提交的分支
--abbrev[=<n>] 用 <n> 位数字显示 SHA-1 哈希值 具体的 git-branch 动作:
-a, --all 列出远程跟踪及本地分支
-d, --delete 删除完全合并的分支
-D 删除分支(即使没有合并)
-m, --move 移动/重命名一个分支,以及它的引用日志
-M 移动/重命名一个分支,即使目标已存在
-c, --copy 拷贝一个分支和它的引用日志
-C 拷贝一个分支,即使目标已存在
-l, --list 列出分支名
--show-current 显示当前分支名
--create-reflog 创建分支的引用日志
--edit-description 标记分支的描述
-f, --force 强制创建、移动/重命名、删除
--merged <提交> 只打印已经合并的分支
--no-merged <提交> 只打印尚未合并的分支
--column[=<风格>] 以列的方式显示分支
--sort <key> 排序的字段名
--points-at <对象> 只打印指向该对象的分支
-i, --ignore-case 排序和过滤属于大小写不敏感
--format <格式> 输出格式
# 列出所有本地分支

$ git branch

# 列出所有远程分支

$ git branch -r

# 列出所有本地分支和远程分支

$ git branch -a

# 新建一个分支,但依然停留在当前分支

$ git branch [branch-name]

# 新建一个分支,并切换到该分支

$ git checkout -b [branch]

# 新建一个分支,指向指定commit

$ git branch [branch] [commit]

# 新建一个分支,与指定的远程分支建立追踪关系

$ git branch --track [branch] [remote-branch]
用法:git checkout [<选项>] <分支>
或:git checkout [<选项>] [<分支>] -- <文件>... -b <分支> 创建并检出一个新的分支
-B <分支> 创建/重置并检出一个分支
-l 为新的分支创建引用日志
--guess 二次猜测 'git checkout <无此分支>'(默认)
--overlay 使用叠加模式(默认)
-q, --quiet 不显示进度报告
--recurse-submodules[=<checkout>]
control recursive updating of submodules
--progress 强制显示进度报告
-m, --merge 和新的分支执行三方合并
--conflict <风格> 冲突输出风格(merge 或 diff3)
-d, --detach HEAD 从指定的提交分离
-t, --track 为新的分支设置上游信息
-f, --force 强制检出(丢弃本地修改)
--orphan <新分支> 新的没有父提交的分支
--overwrite-ignore 更新忽略的文件(默认)
--ignore-other-worktrees
不检查指定的引用是否被其他工作区所占用
-2, --ours 对尚未合并的文件检出我们的版本
-3, --theirs 对尚未合并的文件检出他们的版本
-p, --patch 交互式挑选数据块
--ignore-skip-worktree-bits
对路径不做稀疏检出的限制
--pathspec-from-file <文件>
从文件读取路径表达式
--pathspec-file-nul 使用 --pathspec-from-file,路径表达式用空字符分隔
# 切换到指定分支,并更新工作区

$ git checkout [branch-name]

# 切换到上一个分支

$ git checkout -

# 建立追踪关系,在现有分支与指定的远程分支之间

$ git branch --set-upstream [branch] [remote-branch]
用法:git merge [<选项>] [<提交>...]
或:git merge --abort
或:git merge --continue -n 在合并的最后不显示差异统计
--stat 在合并的最后显示差异统计
--summary (和 --stat 同义)
--log[=<n>] 在合并提交信息中添加(最多 <n> 条)精简提交记录
--squash 创建一个单独的提交而不是做一次合并
--commit 如果合并成功,执行一次提交(默认)
-e, --edit 在提交前编辑提交说明
--cleanup <模式> 设置如何删除提交说明里的空格和#注释
--ff 允许快进(默认)
--ff-only 如果不能快进就放弃合并
--rerere-autoupdate 如果可能,重用冲突解决更新索引
--verify-signatures 验证指定的提交是否包含一个有效的 GPG 签名
-s, --strategy <策略>
要使用的合并策略
-X, --strategy-option <option=value>
所选的合并策略的选项
-m, --message <说明> 合并的提交说明(针对非快进式合并)
-F, --file <路径> 从文件中读取提交说明
-v, --verbose 更加详细
-q, --quiet 更加安静
--abort 放弃当前正在进行的合并
--quit --abort,但是保留索引和工作区
--continue 继续当前正在进行的合并
--allow-unrelated-histories
允许合并不相关的历史
--progress 强制显示进度报告
-S, --gpg-sign[=<key-id>]
GPG 提交签名
--autostash 在操作前后执行自动贮藏和弹出贮藏
--overwrite-ignore 更新忽略的文件(默认)
--signoff 添加 Signed-off-by: 签名
--no-verify 绕过 pre-merge-commit 和 commit-msg 钩子

# 合并指定分支到当前分支 $ git merge [branch] # 选择一个commit,合并进当前分支
用法:git cherry-pick [<选项>] <提交号>...
或:git cherry-pick <子命令> --quit 终止反转或拣选操作
--continue 继续反转或拣选操作
--abort 取消反转或拣选操作
--skip 跳过当前提交并继续
--cleanup <模式> 设置如何删除提交说明里的空格和#注释
-n, --no-commit 不要自动提交
-e, --edit 编辑提交说明
-s, --signoff 添加 Signed-off-by: 签名
-m, --mainline <父编号>
选择主干父提交编号
--rerere-autoupdate 如果可能,重用冲突解决更新索引
--strategy <策略> 合并策略
-X, --strategy-option <选项>
合并策略的选项
-S, --gpg-sign[=<key-id>]
GPG 提交签名
-x 追加提交名称
--ff 允许快进式
--allow-empty 保留初始化的空提交
--allow-empty-message
允许提交说明为空
--keep-redundant-commits
保持多余的、空的提交
$ git cherry-pick [commit]

# 删除分支

$ git branch -d [branch-name]

# 删除远程分支

$ git push origin --delete [branch-name]

$ git branch -dr [remote/branch]

用法:git push [<选项>] [<仓库> [<引用规格>...]]

    -v, --verbose         更加详细
-q, --quiet 更加安静
--repo <仓库> 仓库
--all 推送所有引用
--mirror 镜像所有引用
-d, --delete 删除引用
--tags 推送标签(不能使用 --all or --mirror)
-n, --dry-run 演习
--porcelain 机器可读的输出
-f, --force 强制更新
--force-with-lease[=<引用名>:<期望值>]
要求引用旧的取值为设定值
--recurse-submodules (check|on-demand|no)
控制子模组的递归推送
--thin 使用精简打包
--receive-pack <receive-pack>
接收包程序
--exec <receive-pack>
接收包程序
-u, --set-upstream 设置 git pull/status 的上游
--progress 强制显示进度报告
--prune 清除本地删除的引用
--no-verify 绕过 pre-push 钩子
--follow-tags 推送缺失但有关的标签
--signed[=(yes|no|if-asked)]
用 GPG 为推送签名
--atomic 需要远端支持原子事务
-o, --push-option <server-specific>
传输选项
-4, --ipv4 只使用 IPv4 地址
-6, --ipv6 只使用 IPv6 地址
# 本地存在一个分支,名称叫:develop_dev,但远程没有怎么办?

git push origin develop_dev

这样就在远程建立一个和本地一样的分支
git branch --set-upstream-to=origin/develop develop 本地分支和远程分支建立跟踪关系

六、标签

用法:git tag [-a | -s | -u <key-id>] [-f] [-m <消息> | -F <文件>]
<标签名> [<头>]
或:git tag -d <标签名>...
或:git tag -l [-n[<数字>]] [--contains <提交>] [--no-contains <提交>] [--points-at <对象>]
[--format=<格式>] [--[no-]merged [<提交>]] [<模式>...]
或:git tag -v [--format=<格式>] <标签名>... -l, --list 列出标签名称
-n[<n>] 每个标签信息打印 <n> 行
-d, --delete 删除标签
-v, --verify 验证标签 标签创建选项
-a, --annotate 附注标签,需要一个说明
-m, --message <说明> 标签说明
-F, --file <文件> 从文件中读取提交说明
-e, --edit 强制编辑标签说明
-s, --sign 附注并附加 GPG 签名的标签
--cleanup <模式> 设置如何删除提交说明里的空格和#注释
-u, --local-user <key-id>
使用另外的私钥签名该标签
-f, --force 如果存在,替换现有的标签
--create-reflog 创建引用日志 标签列表选项
--column[=<风格>] 以列的方式显示标签列表
--contains <提交> 只打印包含该提交的标签
--no-contains <提交> 只打印不包含该提交的标签
--merged <提交> 只打印已经合并的标签
--no-merged <提交> 只打印尚未合并的标签
--sort <key> 排序的字段名
--points-at <对象> 只打印指向该对象的标签
--format <格式> 输出格式
--color[=<何时>] 遵照格式中的颜色输出
-i, --ignore-case 排序和过滤属于大小写不敏感
# 列出所有tag
$ git tag # 新建一个tag在当前commit
$ git tag [tag] # 新建一个tag在指定commit
$ git tag [tag] [commit] # 删除本地tag
$ git tag -d [tag] # 删除远程tag
$ git push origin :refs/tags/[tagName] # 查看tag信息
$ git show [tag] # 提交指定tag
$ git push [remote] [tag] # 提交所有tag
$ git push [remote] --tags # 新建一个分支,指向某个tag
$ git checkout -b [branch] [tag]

七、查看信息

用法:git status [<选项>] [--] <路径规格>...

    -v, --verbose         冗长输出
-s, --short 以简洁的格式显示状态
-b, --branch 显示分支信息
--show-stash 显示贮藏区信息
--ahead-behind 计算完整的领先/落后值
--porcelain[=<版本>] 机器可读的输出
--long 以长格式显示状态(默认)
-z, --null 条目以 NUL 字符结尾
-u, --untracked-files[=<模式>]
显示未跟踪的文件,“模式”的可选参数:all、normal、no。(默认:all)
--ignored[=<模式>] 显示已忽略的文件,可选模式:traditional、matching、no。(默认:traditional)
--ignore-submodules[=<何时>]
忽略子模组的更改,“何时”的可选参数:all、dirty、untracked。(默认:all)
--column[=<风格>] 以列的方式显示未跟踪的文件
--no-renames 不检测重命名
-M, --find-renames[=<n>]
检测重命名,可以设置索引相似度
#查询repo的状态.
git status

#-s表示short, -s的输出标记会有两列,第一列是对staging区域而言,第二列是对working目录而言.
git status -s

用法:git log [<选项>] [<版本范围>] [[--] <路径>...]
或:git show [<选项>] <对象>... -q, --quiet 不显示差异输出
--source 显示源
--use-mailmap 使用邮件映射文件
--mailmap --use-mailmap 的别名
--decorate-refs <模式>
只修饰与 <模式> 匹配的引用
--decorate-refs-exclude <模式>
不修饰和 <模式> 匹配的引用
--decorate[=...] 修饰选项
-L <n,m:file> 处理文件中第 n 到 m 之间的行,从 1 开始
# 显示当前分支的版本历史
$ git log # 显示commit历史,以及每次commit发生变更的文件
$ git log --stat # 搜索提交历史,根据关键词
$ git log -S [keyword] # 显示某个commit之后的所有变动,每个commit占据一行
$ git log [tag] HEAD --pretty=format:%s # 显示某个commit之后的所有变动,其"提交说明"必须符合搜索条件
$ git log [tag] HEAD --grep feature # 显示某个文件的版本历史,包括文件改名
$ git log --follow [file]
$ git whatchanged [file] # 显示指定文件相关的每一次diff
$ git log -p [file] # 显示过去5次提交
$ git log -5 --pretty --oneline # 显示所有提交过的用户,按提交次数排序
$ git shortlog -sn #查看仓库的操作日志
$ git reflog # 显示指定文件是什么人在什么时间修改过
$ git blame [file] # 显示暂存区和工作区的代码差异
$ git diff # 显示暂存区和上一个commit的差异
$ git diff --cached [file] # 显示工作区与当前分支最新commit之间的差异
$ git diff HEAD # 显示两次提交之间的差异
$ git diff [first-branch]...[second-branch] # 显示今天你写了多少行代码
$ git diff --shortstat "@{0 day ago}" # 显示某次提交的元数据和内容变化
$ git show [commit] # 显示某次提交发生变化的文件
$ git show --name-only [commit] # 显示某次提交时,某个文件的内容
$ git show [commit]:[filename] # 显示当前分支的最近几次提交
$ git reflog



HEAD@{0}代表HEAD当前的值,HEAD@{3}代表HEAD在3次变化之前的值.git会将变化记录到HEAD对应的reflog文件中,其路径为.git/logs/HEAD, 分支的reflog文件都放在.git/logs/refs目录下的子目录中

# 从本地master拉取代码更新当前分支:branch 一般为master
$ git rebase [branch]
用法:git rebase [-i] [options] [--exec <命令>] [--onto <新基线> | --keep-base] [<上游> [<分支>]]
或:git rebase [-i] [选项] [--exec <命令>] [--onto <新基线>] --root [<分支>]
或:git rebase --continue | --abort | --skip | --edit-todo --onto <版本> 变基到给定的分支而非上游
--keep-base 使用上游和分支的合并基线做为当前基线
--no-verify 允许执行 pre-rebase 钩子
-q, --quiet 安静。暗示 --no-stat
-v, --verbose 显示上游变化的差异统计
-n, --no-stat 不显示上游变化的差异统计
--signoff 为每一个提交添加一个 Signed-off-by: 签名
--ignore-whitespace 传递给 'git am
--committer-date-is-author-date
传递给 'git am
--ignore-date 传递给 'git am
-C <n> 传递给 'git apply'
--whitespace <动作> 传递给 'git apply'
-f, --force-rebase 拣选所有提交,即使未修改
--no-ff 拣选所有提交,即使未修改
--continue 继续
--skip 跳过当前补丁并继续
--abort 终止并检出原有分支
--quit 终止但保持 HEAD 不变
--edit-todo 在交互式变基中编辑待办列表
--show-current-patch 显示正在应用或合并的补丁文件
--apply 使用应用策略进行变基
-m, --merge 使用合并策略进行变基
-i, --interactive 让用户编辑要变基的提交列表
--rerere-autoupdate 如果可能,重用冲突解决更新索引
--empty <{drop,keep,ask}>
如何处理成为空提交的提交
--autosquash 在 -i 交互模式下,移动以 squash!/fixup! 开头的提交
-S, --gpg-sign[=<key-id>]
使用 GPG 签名提交
--autostash 在操作前后执行自动贮藏和弹出贮藏
-x, --exec <exec> 可编辑列表的每一个提交下面增加一行 exec
-r, --rebase-merges[=<模式>]
尝试对合并提交变基而不是忽略它们
--fork-point 使用 'merge-base --fork-point' 来优化上游
-s, --strategy <策略>
使用给定的合并策略
-X, --strategy-option <选项>
将参数传递给合并策略
--root 将所有可达的提交变基到根提交
--reschedule-failed-exec
自动重新安排任何失败的 `exec`
--reapply-cherry-picks
应用所有更改,甚至那些已在上游存在的

八、远程同步

$ git remote update  --更新远程仓储
# 下载远程仓库的所有变动
$ git fetch [remote] # 显示所有远程仓库
$ git remote -v # 显示某个远程仓库的信息
$ git remote show [remote] # 增加一个新的远程仓库,并命名
$ git remote add [shortname] [url]
用法:git remote [-v | --verbose]
或:git remote add [-t <分支>] [-m <master>] [-f] [--tags | --no-tags] [--mirror=<fetch|push>] <名称> <地址>
或:git remote rename <旧名称> <新名称>
或:git remote remove <名称>
或:git remote set-head <名称> (-a | --auto | -d | --delete | <分支>)
或:git remote [-v | --verbose] show [-n] <名称>
或:git remote prune [-n | --dry-run] <名称>
或:git remote [-v | --verbose] update [-p | --prune] [(<组> | <远程>)...]
或:git remote set-branches [--add] <名称> <分支>...
或:git remote get-url [--push] [--all] <名称>
或:git remote set-url [--push] <名称> <新的地址> [<旧的地址>]
或:git remote set-url --add <名称> <新的地址>
或:git remote set-url --delete <名称> <地址> -v, --verbose 冗长输出;必须置于子命令之前
用法:git pull [<选项>] [<仓库> [<引用规格>...]]

    -v, --verbose         更加详细
-q, --quiet 更加安静
--progress 强制显示进度报告
--recurse-submodules[=<on-demand>]
控制子模组的递归获取 和合并相关的选项
-r, --rebase[=(false|true|merges|preserve|interactive)]
使用变基操作取代合并操作以合入修改
-n 在合并的最后不显示差异统计
--stat 在合并的最后显示差异统计
--log[=<n>] 在合并提交信息中添加(最多 <n> 条)精简提交记录
--signoff[=...] 添加 Signed-off-by: 签名
--squash 创建一个单独的提交而不是做一次合并
--commit 如果合并成功,执行一次提交(默认)
--edit 在提交前编辑提交说明
--cleanup <模式> 设置如何删除提交说明里的空格和#注释
--ff 允许快进式
--ff-only 如果不能快进就放弃合并
--verify-signatures 验证指定的提交是否包含一个有效的 GPG 签名
--autostash 在操作前后执行自动贮藏和弹出贮藏
-s, --strategy <策略>
要使用的合并策略
-X, --strategy-option <option=value>
所选的合并策略的选项
-S, --gpg-sign[=<key-id>]
GPG 提交签名
--allow-unrelated-histories
允许合并不相关的历史 和获取相关的参数
--all 从所有的远程抓取
-a, --append 追加到 .git/FETCH_HEAD 而不是覆盖它
--upload-pack <路径> 上传包到远程的路径
-f, --force 强制覆盖本地分支
-t, --tags 抓取所有的标签和关联对象
-p, --prune 清除远程已经不存在的分支的跟踪分支
-j, --jobs[=<n>] 并发拉取的子模组的数量
--dry-run 演习
-k, --keep 保持下载包
--depth <深度> 深化浅克隆的历史
--shallow-since <时间>
基于时间来深化浅克隆的历史
--shallow-exclude <版本>
深化浅克隆的历史,除了特定版本
--deepen <n> 深化浅克隆的历史
--unshallow 转换为一个完整的仓库
--update-shallow 接受更新 .git/shallow 的引用
--refmap <引用映射> 指定获取操作的引用映射
-o, --server-option <server-specific>
传输选项
-4, --ipv4 只使用 IPv4 地址
-6, --ipv6 只使用 IPv6 地址
--negotiation-tip <版本>
报告我们只拥有从该对象开始可达的对象
--show-forced-updates
在所有更新分支上检查强制更新
--set-upstream 为 git pull/fetch 设置上游
# 取回远程仓库的变化,并与本地分支合并
$ git pull [remote] [branch]
用法:git push [<选项>] [<仓库> [<引用规格>...]]

    -v, --verbose         更加详细
-q, --quiet 更加安静
--repo <仓库> 仓库
--all 推送所有引用
--mirror 镜像所有引用
-d, --delete 删除引用
--tags 推送标签(不能使用 --all or --mirror)
-n, --dry-run 演习
--porcelain 机器可读的输出
-f, --force 强制更新
--force-with-lease[=<引用名>:<期望值>]
要求引用旧的取值为设定值
--recurse-submodules (check|on-demand|no)
控制子模组的递归推送
--thin 使用精简打包
--receive-pack <receive-pack>
接收包程序
--exec <receive-pack>
接收包程序
-u, --set-upstream 设置 git pull/status 的上游
--progress 强制显示进度报告
--prune 清除本地删除的引用
--no-verify 绕过 pre-push 钩子
--follow-tags 推送缺失但有关的标签
--signed[=(yes|no|if-asked)]
用 GPG 为推送签名
--atomic 需要远端支持原子事务
-o, --push-option <server-specific>
传输选项
-4, --ipv4 只使用 IPv4 地址
-6, --ipv6 只使用 IPv6 地址
# 上传本地指定分支到远程仓库
$ git push [remote] [branch] # 强行推送当前分支到远程仓库,即使有冲突
$ git push [remote] --force # 推送所有分支到远程仓库
$ git push [remote] --all

九、撤销

# 恢复暂存区的指定文件到工作区
$ git checkout [file] # 恢复某个commit的指定文件到暂存区和工作区
$ git checkout [commit] [file] # 恢复暂存区的所有文件到工作区
$ git checkout . # 重置暂存区的指定文件,与上一次commit保持一致,但工作区不变
$ git reset [file] # 重置暂存区与工作区,与上一次commit保持一致
$ git reset --hard # 重置当前分支的指针为指定commit,同时重置暂存区,但工作区不变
$ git reset [commit] # 重置当前分支的HEAD为指定commit,同时重置暂存区和工作区,与指定commit一致
$ git reset --hard [commit] # 重置当前HEAD为指定commit,但保持暂存区和工作区不变
$ git reset --keep [commit] # 新建一个commit,用来撤销指定commit
# 后者的所有变化都将被前者抵消,并且应用到当前分支
$ git revert [commit] # 暂时将未提交的变化移除,稍后再移入
$ git stash
$ git stash pop #会显示这个栈的list.
$ git stash list #取出stash中的上一个项目(stash@{0}),并且应用于当前的工作目录.
$ git stash apply #也可以指定别的项目
$ git stash apply stash@{1} #如果你在应用stash中项目的同时想要删除它
$ git stash pop #删除stash中的项目,删除上一个,也可指定参数删除指定的一个项目.
$ git stash drop #删除所有项目
$ git stash clear

git常用命令自己梳理总结的更多相关文章

  1. Git 常用命令和 Git Flow 梳理

    git 用 git 有一段时间了,之前没有详细地了解 git flow,导致协作过程中或多或少出现了一些头疼问题.最近静下心来理了下 git flow 的整个流程,再回头看开朗了不少,总结到这里.介绍 ...

  2. git常用命令(持续更新中)

    git常用命令(持续更新中) 本地仓库操作git int                                 初始化本地仓库git add .                       ...

  3. Git 常用命令详解

    Git 是一个很强大的分布式版本管理工具,它不但适用于管理大型开源软件的源代码(如:linux kernel),管理私人的文档和源代码也有很多优势(如:wsi-lgame-pro) Git 的更多介绍 ...

  4. Git 常用命令大全

    Git常用操作命令: 1) 远程仓库相关命令 检出仓库:$ git clone git://github.com/jquery/jquery.git 查看远程仓库:$ git remote -v 添加 ...

  5. Git常用命令总结

    Git常用命令总结 git init      在本地新建一个repo,进入一个项目目录,执行git init,会初始化一个repo,并在当前文件夹下创建一个.git文件夹.   git clone ...

  6. GIT常用命令备忘

    Git配置 git config --global user.name "storm" git config --global user.email "stormzhan ...

  7. Git 常用命令2

    Git 常用命令 Git 是一个很强大的分布式版本控制系统.它不但适用于管理大型开源软件的源代码,管理私人的文档和源代码也有很多优势. Git常用操作命令: 1) 远程仓库相关命令 检出仓库:$ gi ...

  8. git常用命令-基本操作

    git常用命令-基本操作 1)      新增文件 新增了Test_1.java git add Test_1.java git commit –m “新增了Test_1.java” git push ...

  9. 转收藏:Git常用命令速查表

    一. Git 常用命令速查 git branch 查看本地所有分支git status 查看当前状态 git commit 提交 git branch -a 查看所有的分支git branch -r ...

随机推荐

  1. Git 分支基本命令

    1. 查看当前分支 (git branch) 2. 创建分支 (git branch 分支名) 3.切换分支(git checkout 分支名) 4.分支上的常规操作 5.分支的合并 (git che ...

  2. 揭秘有状态服务上 Kubernetes 的核心技术

    背景 随着 Kubernetes 成为云原生的最热门的解决方案,越来越多的传统服务从虚拟机.物理机迁移到 Kubernetes,各云厂商如腾讯自研上云也主推业务通过Kubernetes来部署服务,享受 ...

  3. .Net RabbitMQ实战指南——RabbitMQ相关概念介绍

    什么是消息中间件 消息(Message)是指在应用间传送的数据.消息可以非常简单,比如只包含文本字符串.JSON等,也可以很复杂,比如内嵌对象. 消息队列中间件(Message Queue Middl ...

  4. 智能驾驶操作系统OS

    智能驾驶操作系统OS 自动驾驶操作系统是一个流程化.复杂的综合系统,设计到众多流程和领域.首先,分为不同的层,包括:感知层.认知层.决策规划层.控制层和执行层几个层面. 自动驾驶操作系统是一个流程化. ...

  5. Tomcat配置probe详细过程(步骤加截图)

    1.先下载probe.war包,点击probe.war进行下载:附上下载地址:https://github.com/psi-probe/psi-probe/releases 2.将probe.war包 ...

  6. CentOS:操作系统级监控及常用计数器解析

    我相信有一些人看到这篇文章的标题肯定有种不想看的感觉,因为这样的内容实在被写得太多太多了.操作系统分析嘛,无非就是 CPU 使用率.I/O 使用率.内存使用率.网络使用率等各种使用率的描述. 然而因为 ...

  7. C#基础之checked与 unchecked的使用

    C#基础之checked与 unchecked的使用 以上都是C#中的两个关键字的使用.据官网给出的相关介绍是:C# 语句既可以在已检查的上下文中执行,也可以在未检查的上下文中执行. 在已检查的上下文 ...

  8. python pyyaml操作yaml配置文件

    在测试工作中,可以使用yaml编写测试用例,执行测试用例时直接获取yaml中的用例数据进行测试(如:接口自动化测试) 1.什么是yaml 是一种可读的数据序列化语言,通常用于配置文件 非常简洁和强大, ...

  9. Task02:基础查询与排序

    2.1 SELECT语句基础 2.1.1 从表中选取数据 SELECT语句 从表中选取数据时需要使用SELECT语句,也就是只从表中选出(SELECT)必要数据的意思.通过SELECT语句查询并选取出 ...

  10. DOS命令行(11)——更多实用的命令行工具

    start 启动另一个窗口运行指定的程序或命令,所有的DOS命令和命令行程序都可以由start命令来调用.该命令不仅能运行程序,还能运行协议对应的程序 命令格式:START ["title& ...