Git是一个分布式版本掌握系统,用于跟踪文件和文件夹的变革。
它最初由Linus Torvalds在2005年创建,用于管理Linux内核的开拓。
Git的设计目标是速率、数据完全性和支持分布式、非线性事情流程。

与集中式版本掌握系统(如SVN)不同,Git将代码仓库完备复制到每个开拓者确当地皮算机上,每个开拓者都具有完全的代码历史记录和版本信息。
这种分布式的特性使得开拓者可以在没有网络连接的情形下进行事情,并且可以更轻松地处理分支、合并和代码冲突等操作。

Git利用"提交"(commit)的机制来记录文件和文件夹的变革。
每次提交都包含一个快照,记录了所有被修正的文件的状态。
通过提交,开拓者可以轻松地回溯代码的历史、比较不同版本之间的差异,并且可以在须要时规复到特定的版本。

gitphp全网最全git教程一文带你玩转git NoSQL

Git还供应了强大的分支功能,许可开拓者创建和切换不同的分支来独立开拓新功能或修复缺点。
分支可以合并回主线,以便将不同的事情合并到一起。

除了基本的版本掌握功能外,Git还供应了许多其他功能,如标签(tagging)、快速提高/回滚、远程仓库同步等。
它也有丰富的命令行工具和图形用户界面(GUI)工具来支持开拓者的事情流程。

Git已经成为广泛利用的版本掌握系统,不仅仅用于开源项目,许多企业和个人开拓者也采取Git来管理和追踪他们的代码。
它的灵巧性、性能和强大的功能使得它成为当代软件开拓中不可或缺的工具之一。

二、安装

访问官网:https://git-scm.com/downloads下载,根据提示安装即可

三、GIT选项及参数

git -v,git --version:显示版本信息git -h,git --help:显示git帮助信息git -C :指定Git操作的事情目录git -c =:设置临时的配置选项。
git --exec-path[=]:显示或设置Git的可实行文件路径。
git --html-path:显示Git的HTML文档路径。
git --man-path:显示Git的man手册路径。
git --info-path:显示Git的info文档路径。
git [-p | --paginate | -P | --no-pager]:掌握Git命令的分页显示办法。
git --no-replace-objects:禁止自动更换Git工具。
git --bare:指定Git仓库为裸仓库。
git --git-dir=:指定Git仓库的路径。
git --work-tree=:指定Git事情树的路径。
git --namespace=:指定Git命名空间。
git --config-env==:设置环境变量来覆盖Git配置。
git :要实行的Git命令。

四、git命令之 git ini,初始化指定目录git仓库

--template :指定一个目录作为模板目录,Git会从该目录中复制文件到新创建的仓库中。
--bare:创建一个裸仓库,即没有事情树的仓库。
裸仓库常日用于共享或作为远程仓库。
--shared[=]:指定Git仓库作为共享仓库,许可多个用户访问。
可选的参数可以设置共享仓库的权限。
-q, --quiet:静默模式,不显示详细的输出信息。
--separate-git-dir :将Git仓库的存储目录与事情树分开。
存储目录可以位于事情树之外。
-b, --initial-branch :指定初始分支的名称。
--object-format :指定要利用的哈希算法格式。

五、git命令之 git remote,管理 Git 的远程仓库

git remote:列出已配置的远程仓库的简短名称。
git remote -v:列出已配置的远程仓库的详细信息,包括 URL。
git remote add :添加一个新的远程仓库,指定仓库的简短名称和 URL。
git remote rename :将现有的远程仓库简短名称变动为新名称。
git remote remove :移除指定的远程仓库。
git remote set-head :设置远程仓库的 HEAD 引用。
git remote show :显示指定远程仓库的详细信息。
git remote prune :删除不再存在于远程仓库的分支的引用。
git remote update :更新指定远程仓库的分支引用。
git remote set-branches ...:设置指定远程仓库要跟踪的分支。
git remote get-url :获取指定远程仓库的 URL。
git remote set-url :设置指定远程仓库的 URL。
git remote set-url --add :添加一个额外的 URL 到指定远程仓库。
git remote set-url --delete :从指定远程仓库中删除指定的 URL。

六、git命令之git pull,从远程仓库获取最新的提交并合并到当前分支

-v, --verbose:显示更详细的信息。
-q, --quiet:显示更少的信息。
--progress:逼迫显示进度报告。
--recurse-submodules[=]:掌握是否递归获取子模块。
-r, --rebase[=(false|true|merges|interactive)]:利用变基而不是合并来合并变动。
-n:在合并结束时不显示 diffstat。
--stat:在合并结束时显示 diffstat。
--log[=]:将 shortlog 中的(最多 条)条款添加到合并提交中。
--signoff[=...]:添加一个 Signed-off-by 尾注。
--squash:创建一个单一的提交,而不进行合并。
--commit:如果合并成功,则实行提交(默认行为)。
--edit:在提交之前编辑提交。
--cleanup :掌握如何从中删除空格和 # 注释。
--ff:许可快进合并。
--ff-only:如果无法进行快进合并,则中止。
--verify:掌握利用 pre-merge-commit 和 commit-msg 钩子。
--verify-signatures:验证指定提交是否具有有效的 GPG 署名。
--autostash:在合并前后自动进行暂存和规复暂存。
-s, --strategy :要利用的合并策略。
-X, --strategy-option :选定合并策略的选项。
-S, --gpg-sign[=]:GPG 对提交进行署名。
--allow-unrelated-histories:许可合并不干系的历史。
--all:从所有远程仓库获取。
-a, --append:追加到 .git/FETCH_HEAD 而不是覆盖。
--upload-pack :远程真个 upload pack 路径。
-f, --force:逼迫覆盖本地分支。
-t, --tags:获取所有标签及其关联的工具。
-p, --prune:删除不再存在于远程的跟踪分支。
-j, --jobs[=]:并行获取的子模块数量。
--dry-run:演示运行,不实际实行操作。
-k, --keep:保留下载的 pack 文件。
--depth :减少浅克隆的历史深度。
--shallow-since :基于韶光减少浅克隆的历史深度。
--shallow-exclude :减少浅克隆的历史深度,打消指定的提交。
--deepen :增加浅克隆的历史深度。
--unshallow:转换为完全仓库。
--update-shallow:接管更新 .git/shallow 的引用。
--refmap :指定获取的引用映射。
-o, --server-option :通报给做事器的选项。
-4, --ipv4:仅利用 IPv4 地址。
-6, --ipv6:仅利用 IPv6 地址。
--negotiation-tip :报告我们只有从该工具可达的工具。
--show-forced-updates:检讨所有更新的分支是否有逼迫更新。
--set-upstream:为 git pull/fetch 设置上游分支。

七、git命令之git clone,克隆远程仓库到本地

-v, --verbose:显示更详细的输出信息。
-q, --quiet:显示更少的输出信息。
--progress:逼迫显示克隆进度报告。
--reject-shallow:不克隆浅层仓库。
-n, --no-checkout:不创建检出(不创建事情树)。
--bare:创建一个裸仓库,即没有事情树的仓库。
--mirror:创建一个镜像仓库,相称于--bare的别名。
-l, --local:从本地仓库克隆。
--no-hardlinks:不该用硬链接,始终复制文件。
-s, --shared:设置为共享仓库。
--recurse-submodules[=]:在克隆时初始化子模块。
--recursive[=]:--recurse-submodules的别名。
-j, --jobs :并行克隆的子模块数量。
--template :指定一个目录作为模板目录,Git会从该目录中复制文件到新创建的仓库中。
--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仓库的存储目录与事情树分开。
-c, --config :在新仓库中设置配置选项。
--server-option :通报给做事器的选项。
-4, --ipv4:仅利用IPv4地址。
-6, --ipv6:仅利用IPv6地址。
--filter :工具过滤。
--also-filter-submodules:对子模块运用部分克隆过滤器。
--remote-submodules:克隆的子模块将利用它们的远程跟踪分支。
--sparse:初始化一个稀疏检出文件,仅包含根目录下的文件。
--bundle-uri :在从源远程仓库获取之前,利用指定的URI下载捆绑文件。

八、git命令之git branch,分支管理

git branch dev:创建分支-v, --verbose:显示哈希值和提交主题,利用两次显示上游分支。
-q, --quiet:禁止显示信息性。
-t, --track[=(direct|inherit)]:设置分支的跟踪配置。
-u, --set-upstream-to <upstream>:变动上游信息。
--unset-upstream:取消上游信息。
--color[=<when>]:利用彩色输出。
-r, --remotes:操作远程跟踪分支。
--contains <commit>:仅显示包含指定提交的分支。
--no-contains <commit>:仅显示不包含指定提交的分支。
--abbrev[=<n>]:利用 <n> 个数字显示工具名称-a, --all:列出本地分支和远程跟踪分支。
-d, --delete:删除已完备合并的分支。
-D:删除分支,纵然它未完备合并。
-m, --move:移动/重命名分支及其引用日志。
-M:纵然目标分支存在,也移动/重命名分支。
-c, --copy:复制分支及其引用日志。
-C:纵然目标分支存在,也复制分支。
-l, --list:列出分支名称。
--show-current:显示当前分支名称。
--create-reflog:创建分支的引用日志。
--edit-description:编辑分支的描述。
-f, --force:逼迫创建、移动/重命名、删除分支。
--merged <commit>:仅显示已合并的分支。
--no-merged <commit>:仅显示未合并的分支。
--column[=<style>]:以列的形式列出分支。
--sort <key>:按指定字段进行排序。
--points-at <object>:仅显示与指定工具干系的分支。
-i, --ignore-case:排序和过滤不区分大小写。
--recurse-submodules:递归处理子模块。
--format <format>:指定输出的格式。

九、git命令之git add,将文件或目录添加到Git的暂存区

-A, --all, . :添加所有已跟踪和未跟踪文件的变动。
-n, --dry-run:演示运行,不实际实行添加操作,只显示将要被添加的文件。
-v, --verbose:显示详细的输出信息。
-i, --interactive:交互式选择要添加的文件。
-p, --patch:交互式选择要添加的文件补丁(hunks)。
-e, --edit:编辑当前的差异(diff)并进行添加。
-f, --force:许可添加被忽略的文件。
-u, --update:更新已跟踪的文件。
--renormalize:重新规范化已跟踪文件的行尾(EOL),相称于-u的别名。
-N, --intent-to-add:仅记录将来要添加的路径。
--ignore-removal:忽略事情树中已删除的文件(与--no-all相同)。
--refresh:仅刷新索引,不进行添加操作。
--ignore-errors:跳过因缺点而无法添加的文件。
--ignore-missing:在演示运行中检讨(纵然缺失落的)文件是否被忽略。
--sparse:许可更新稀疏检出范围之外的条款。
--chmod (+|-)x:覆盖指定文件的可实行位。
--pathspec-from-file <file>:从文件中读取路径规范(pathspec)。
--pathspec-file-nul:与--pathspec-from-file一起利用,路径规范元素以NUL字符分隔。

十、git命令之git commit,将缓存区的内容保存到仓库

-q, --quiet:在成功提交后禁止显示择要信息。
-v, --verbose:在提交模板中显示差异。
-F, --file <file>:从文件中读取提交。
--author <author>:覆盖提交的作者信息。
--date <date>:覆盖提交的日期。
-m, --message <message>:提交。
-c, --reedit-message <commit>:重用并编辑指定提交的。
-C, --reuse-message <commit>:重用指定提交的。
--fixup [(amend|reword):]<commit>:利用自动修复格式的来修复或修正指定的提交。
--squash <commit>:利用自动压缩格式的来压缩指定的提交。
--reset-author:将提交的作者变动为当前用户(与 -C/-c/--amend 一起利用)。
--trailer <trailer>:添加自定义的 trailer。
-s, --signoff:添加一个 Signed-off-by trailer。
-t, --template <file>:利用指定的模板文件。
-e, --edit:逼迫编辑提交。
--cleanup <mode>:指定如何打消中的空格和 # 注释。
--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:打算完全的 ahead/behind 值。
--porcelain:以机器可读的格式输出。
--long:以详细格式显示状态(默认)。
-z, --null:以 NUL 结束条款。
--amend:修正上一次提交。
--no-post-rewrite:绕过 post-rewrite 钩子。
-u, --untracked-files[=<mode>]:显示未跟踪的文件,可选模式:all、normal、no(默认为 all)。
--pathspec-from-file <file>:从文件中读取路径规范。
--pathspec-file-nul:与 --pathspec-from-file 一起利用,路径规范元素利用 NUL 字符分隔。

十一、git命令之git push,将保存好的内容提交到仓库

-v, --verbose:显示详细的输出信息。
-q, --quiet:显示更少的输出信息。
--repo <repository>:指定仓库。
--all:推送所有引用(refs)。
--mirror:镜像推送所有引用。
-d, --delete:删除引用。
--tags:推送标签(不能与 --all 或 --mirror 一起利用)。
-n, --dry-run:实行干运行,不实际推送。
--porcelain:以机器可读的格式输出。
-f, --force:逼迫更新。
--force-with-lease[=<refname>:<expect>]:哀求引用的旧值与指定的值相同。
--force-if-includes:哀求远程更新在本地已集成。
--recurse-submodules (check|on-demand|no):掌握递归推送子模块。
--thin:利用瘦包。
--receive-pack <receive-pack>:指定吸收包程序。
--exec <receive-pack>:指定吸收包程序。
-u, --set-upstream:为 git pull 和 git status 设置上游。
--progress:逼迫显示进度报告。
--prune:修剪本地删除的引用。
--no-verify:绕过预推钩子。
--follow-tags:推送缺失落但干系的标签。
--signed[=(yes|no|if-asked)]:对推送进行 GPG 署名。
--atomic:在远程端要求原子事务。
-o, --push-option <server-specific>:传输选项。
-4, --ipv4:仅利用 IPv4 地址。
-6, --ipv6:仅利用 IPv6 地址。

十二、git命令之git restore,还原文件的内容或属性

-s, --source <tree-ish>:指定要从中检出文件的树工具(tree-ish)。
-S, --staged:还原暂存区中的文件。
这会将文件的内容还原为最近一次提交时的状态。
-W, --worktree:还原事情树中的文件。
这会将文件的内容还原为最近一次提交时的状态。
--ignore-unmerged:忽略未合并的条款。
--overlay:利用叠加模式进行还原。
-q, --quiet:不显示进度报告。
--recurse-submodules[=<checkout>]:掌握对子模块的递归更新。
--progress:逼迫显示进度报告。
-m, --merge:对付未合并的文件,实行三方合并。
--conflict <style>:指定冲突的样式(merge、diff3 或 zdiff3)。
-2, --ours:对付未合并的文件,检出我们的版本。
-3, --theirs:对付未合并的文件,检出他们的版本。
-p, --patch:以交互办法选择补丁。
--ignore-skip-worktree-bits:不仅限于稀疏条款标路径规范。
--pathspec-from-file <file>:从文件中读取路径规范。
--pathspec-file-nul:与 --pathspec-from-file 一起利用,路径规范元素以 NUL 字符分隔

十三、git命令之git checkout,切换分支或规复文件,可利用git switch替代

-b <branch>:创建并切换到一个新分支。
-B <branch>:创建或重置并切换到一个分支。
-l:为新分支创建引用日志。
--guess:对付不存在的分支,进行二次预测(默认行为)。
--overlay:利用覆盖模式(默认行为)。
-q, --quiet:禁止显示进度报告。
--recurse-submodules[=<checkout>]:掌握递归更新子模块。
--progress:逼迫显示进度报告。
-m, --merge:实行与新分支的三方合并。
--conflict <style>:冲突样式(merge、diff3或zdiff3)。
-d, --detach:在指定的提交上分离HEAD。
-t, --track[=(direct|inherit)]:设置分支跟踪配置。
-f, --force:逼迫切换分支(放弃本地修正)。
--orphan <new-branch>:创建一个无父分支。
--overwrite-ignore:更新被忽略的文件(默认行为)。
--ignore-other-worktrees:不检讨其他事情树是否持有给定的引用。
-2, --ours:对付未合并的文件,检出我们的版本。
-3, --theirs:对付未合并的文件,检出他们的版本。
-p, --patch:交互式选择补丁。
--ignore-skip-worktree-bits:不仅限于稀疏条款标路径规范。
--pathspec-from-file <file>:从文件中读取路径规范。
--pathspec-file-nul:与 --pathspec-from-file 一起利用,路径规范元素利用NUL字符分隔

十四、git命令之git switch,切换分支或规复文件

-c, --create <branch>:创建并切换到一个新的分支。
-C, --force-create <branch>:创建(或重置)并切换到一个分支。
--guess:考试测验预测 git switch <no-such-branch> 的意图。
--discard-changes:丢弃本地的修正。
-q, --quiet:禁止显示进度报告。
--recurse-submodules[=<checkout>]:掌握子模块的递归更新。
--progress:逼迫显示进度报告。
-m, --merge:利用三方合并(3-way merge)模式切换到新的分支。
--conflict <style>:指定冲突办理的风格(merge、diff3 或 zdiff3)。
-d, --detach:在指定的提交上分离 HEAD。
-t, --track[=(direct|inherit)]:设置分支的跟踪配置。
-f, --force:逼迫切换分支(丢弃本地修正)。
--orphan <new-branch>:创建一个新的无父分支。
--overwrite-ignore:更新被忽略的文件(默认行为)。
--ignore-other-worktrees:不检讨其他事情树是否持有给定的引用。

十五、git命令之git merge,将一个或多个提交合并到当前分支

-n:在合并结束时不显示diffstat。
--stat:在合并结束时显示diffstat。
--summary:--stat的同义词。
--log[=<n>]:将短日志中的(最多<n>个)条款添加到合并提交中。
--squash:创建一个单独的提交,而不是实行合并操作。
--commit:如果合并成功,则实行提交(默认行为)。
-e, --edit:在提交之前编辑。
--cleanup <mode>:指定如何从中去除空格和#注释。
--ff:许可快进合并(默认行为)。
--ff-only:如果无法进行快进合并,则中止。
--rerere-autoupdate:如果可能,利用重用的冲突办理更新索引。
--verify-signatures:验证指定的提交是否具有有效的GPG署名。
-s, --strategy <strategy>:指定要利用的合并策略。
-X, --strategy-option <option=value>:为选择的合并策略指定选项。
-m, --message <message>:合并提交的(用于非快进合并)。
-F, --file <path>:从文件中读取合并提交的。
--into-name <name>:利用<name>替代实际目标。
-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命令之git log,显示提交历史记录

-q, --quiet:抑制差异输出。
--source:显示源信息。
--use-mailmap:利用邮件映射文件。
--mailmap:--use-mailmap的别名。
--clear-decorations:打消先前定义的所有装饰过滤器。
--decorate-refs <pattern>:只装饰与<pattern>匹配的引用。
--decorate-refs-exclude <pattern>:不装饰与<pattern>匹配的引用。
--decorate[=...]:装饰选项。
-L range:file:跟踪指定文件中行范围<start>,<end>或函数:<funcname>的演化

十七、git命令之git reset,将当前分支的指针重置到指定的提交

-q, --quiet:静默模式,只报告缺点。
--no-refresh:重置后跳过刷新索引。
--mixed:重置HEAD和索引。
--soft:仅重置HEAD。
--hard:重置HEAD、索引和事情树。
--merge:重置HEAD、索引和事情树。
--keep:重置HEAD,但保留本地变动。
--recurse-submodules[=<reset>]:掌握递归更新子模块。
-p, --patch:交互式选择差异块。
-N, --intent-to-add:仅记录已删除的路径将来将被添加。
--pathspec-from-file <file>:从文件中读取路径规范。
--pathspec-file-nul:与--pathspec-from-file一起利用,路径规范元素利用NUL字符分隔。
-z:已弃用(请改用--pathspec-file-nul),路径利用NUL字符分隔。
--stdin:已弃用(请改用--pathspec-from-file=-),从标准输入中读取路径

十八、git命令之git diff,比较文件、提交或分支之间的差异

-p, --patch:天生补丁。
-s, --no-patch:禁止差异输出。
-u:天生补丁。
-U, --unified[=<n>]:天生带有 <n> 行高下文的差异。
-W, --function-context:天生带有 <n> 行高下文的差异。
--raw:以原始格式天生差异。
--patch-with-raw:-p --raw 的同义词。
--patch-with-stat:-p --stat 的同义词。
--numstat:机器友好的 --stat。
--shortstat:仅输出 --stat 的末了一行。
-X, --dirstat[=<param1,param2>...]:输出每个子目录中变动量的分布情形。
--cumulative:--dirstat=cumulative 的同义词。
--dirstat-by-file[=<param1,param2>...]:--dirstat=files,param1,param2... 的同义词。
--check:如果变动引入冲突标记或空缺缺点,则发出警告。
--summary:压缩的择要,例如创建、重命名和模式变动。
--name-only:仅显示变动文件的名称。
--name-status:仅显示变动文件的名称和状态。
--stat[=<width>[,<name-width>[,<count>]]]:天生差异统计信息。
--stat-width <width>:以给定宽度天生差异统计信息。
--stat-name-width <width>:以给定名称宽度天生差异统计信息。
--stat-graph-width <width>:以给定图形宽度天生差异统计信息。
--stat-count <count>:天生有限行数的差异统计信息。
--compact-summary:以差异统计信息的紧凑形式天生择要。
--binary:输出可运用的二进制差异。
--full-index:在“index”行上显示完全的前图像和后图像工具名称。
--color[=<when>]:显示带颜色的差异。
--ws-error-highlight <kind>:在差异中的“context”、“old”或“new”行中突出显示空缺缺点。
-z:在 --raw 或 --numstat 中不修正途径名,并利用 NUL 作为输出字段的终止符。
--abbrev[=<n>]:利用 <n> 个数字显示工具名称。
--src-prefix <prefix>:显示给定的源前缀,而不是 "a/"。
--dst-prefix <prefix>:显示给定的目标前缀,而不是 "b/"。
--line-prefix <prefix>:在每行输出前添加额外的前缀。
--no-prefix:不显示任何源或目标前缀。
--inter-hunk-context <n>:在差异块之间显示指定行数的高下文。
--output-indicator-new <char>:指定用于表示新行的字符,而不是 "+"。
--output-indicator-old <char>:指定用于表示旧行的字符,而不是 "-"。
--output-indicator-context <char>:指定用于表示高下文的字符,而不是空格。
-B, --break-rewrites[=<n>[/<m>]]:将完备重写的变动拆分为删除和创建。
-M, --find-renames[=<n>]:检测重命名。
-D, --irreversible-delete:省略删除的预映像。
-C, --find-copies[=<n>]:检测复制。
--find-copies-harder:利用未修正的文件作为复制的源。
--no-renames:禁用重命名检测。
--rename-empty:利用空的 blob 作为重命名源--follow:在重命名后连续列出文件的历史记录。
-l <n>:如果重命名/复制目标的数量超过给定限定,则阻挡重命名/复制检测。
--minimal:天生最小可能的差异。
-w, --ignore-all-space:在比较行时忽略空格。
-b, --ignore-space-change:忽略空格数量的变动。
--ignore-space-at-eol:忽略行尾的空格变动。
--ignore-cr-at-eol:忽略行尾的回车符。
--ignore-blank-lines:忽略所有行都为空缺的变动。
-I, --ignore-matching-lines <regex>:忽略所有行都匹配 <regex> 的变动。
--indent-heuristic:启示式地移动差异块边界以便于阅读。
--patience:利用 "patience diff" 算法天生差异。
--histogram:利用 "histogram diff" 算法天生差异。
--diff-algorithm <algorithm>:选择差异算法。
--anchored <text>:利用 "anchored diff" 算法天生差异。
--word-diff[=<mode>]:显示单词差异,利用 <mode> 来分隔变动的单词。
--word-diff-regex <regex>:利用 <regex> 来定义单词。
--color-words[=<regex>]:相称于 --word-diff=color --word-diff-regex=<regex>。
--color-moved[=<mode>]:移动的代码行以不同的颜色显示。
--color-moved-ws <mode>:在 --color-moved 中如何忽略空格--relative[=<prefix>]:在子目录中运行时,打消外部变动并显示相对路径。
-a, --text:将所有文件视为文本。
-R:交流两个输入,反转差异。
--exit-code:如果存在差异,则以 1 退出,否则为 0。
--quiet:禁用程序的所有输出。
--ext-diff:许可实行外部差异赞助程序。
--textconv:在比较二进制文件时运行外部文本转换过滤器。
--ignore-submodules[=<when>]:在天生差异时忽略子模块的变动。
--submodule[=<format>]:指定如何显示子模块的差异。
--ita-invisible-in-index:从索引中隐蔽 'git add -N' 条款。
--ita-visible-in-index:将 'git add -N' 条款视为索引中的实际条款。
-S <string>:查找变动指定字符串的涌现次数。
-G <regex>:查找变动指定正则表达式的涌现次数。
--pickaxe-all:显示利用 -S 或 -G 的变动集中的所有变动。
--pickaxe-regex:将 -S 中的 <string> 视为扩展的 POSIX 正则表达式。
-O <file>:掌握输出中文件的顺序。
--rotate-to <path>:首先显示指定路径的变动。
--skip-to <path>:跳过输出直到指定路径。
--find-object <object-id>:查找变动指定工具的涌现次数。
--diff-filter [(A|C|D|M|R|T|U|X|B)...[]]:按差异类型选择文件。
--output <file>:输出到指定的文件。

十九、git命令之git config,配置和管理 Git 环境

--global:利用全局配置文件。
--system:利用系统配置文件。
--local:利用仓库配置文件。
--worktree:利用每个事情树的配置文件。
-f, --file <file>:利用指定的配置文件。
--blob <blob-id>:从给定的 blob 工具读取配置。
--get:获取值:name [value-pattern]。
--get-all:获取所有值:key [value-pattern]。
--get-regexp:获取正则表达式匹配的值:name-regex [value-pattern]。
--get-urlmatch:获取特定于 URL 的值:section[.var] URL。
--replace-all:更换所有匹配的变量:name value [value-pattern]。
--add:添加新变量:name value。
--unset:移除变量:name [value-pattern]。
--unset-all:移除所有匹配项:name [value-pattern]。
--rename-section:重命名部分:old-name new-name。
--remove-section:移除部分:name。
-l, --list:列出所有配置。
--fixed-value:在比较值与 'value-pattern' 时利用字符串相等性。
-e, --edit:打开编辑器。
--get-color:查找配置的颜色:slot [default]。
--get-colorbool:查找颜色设置:slot [stdout-is-tty]。
-t, --type <type>:给定值的类型。
--bool:值为 "true" 或 "false"。
--int:值为十进制数。
--bool-or-int:值为 --bool 或 --int。
--bool-or-str:值为 --bool 或字符串。
--path:值为路径(文件或目录名)。
--expiry-date:值为到期日期。
-z, --null:以 NUL 字节终止值。
--name-only:仅显示变量名称。
--includes:在查找时考虑包含指令。
--show-origin:显示配置的来源(文件、标准输入、blob、命令行)。
--show-scope:显示配置的范围(事情树、本地、全局、系统、命令)。
--default <value>:在利用 --get 时,当条款缺失落时利用默认值。

二十、git命令之git tag,管理和查询 Git 的标签

-a, --annotate:创建带注释的标签,须要供应。
-m, --message <message>:设置标签。
-F, --file <file>:从文件中读取消息。
-e, --edit:逼迫编辑标签。
-s, --sign:创建带注释和 GPG 署名的标签。
--cleanup <mode>:设置如何打消中的空格和 # 注释。
-u, --local-user <key-id>:利用另一个密钥进行署名。
-f, --force:如果标签存在,则更换标签。
--create-reflog:创建引用日志。
-l, --list:列出标署名称。
-n[<n>]:打印每个标签的 <n> 行。
-d, --delete:删除标签。
-v, --verify:验证标签。
--column[=<style>]:以列的形式显示标签列表。
--contains <commit>:仅打印包含指定提交的标签。
--no-contains <commit>:仅打印不包含指定提交的标签。
--merged <commit>:仅打印已合并的标签。
--no-merged <commit>:仅打印未合并的标签。
--sort <key>:按字段名排序。
--points-at <object>:仅打印指向工具的标签。
--format <format>:设置输出的格式。
--color[=<when>]:利用格式颜色。
-i, --ignore-case:排序和过滤时不区分大小写。

二十一、git命令之git status,显示git仓库当前状态

-v, --verbose:供应详细的输出信息。
-s, --short:以简洁办法显示状态信息。
-b, --branch:显示分支信息。
--show-stash:显示存储区(stash)的信息。
--ahead-behind:打算完全的 ahead/behind 值。
--porcelain[=<version>]:以机器可读的格式输出。
--long:以详细格式显示状态信息(默认格式)。
-z, --null:以 NUL 终止条款。
-u, --untracked-files[=<mode>]:显示未跟踪文件,可选模式:all、normal、no(默认为 all)。
--ignored[=<mode>]:显示被忽略的文件,可选模式:traditional、matching、no(默认为 traditional)。
--ignore-submodules[=<when>]:忽略子模块的变动,可选 when:all、dirty、untracked(默认为 all)。
--column[=<style>]:以列的形式列出未跟踪文件。
--no-renames:不检测重命名操作。
-M, --find-renames[=<n>]:检测重命名操作,可选设置相似度指数(similarity index)的阈值(默认为 50)。

二十二、git命令之git fetch,从远程仓库获取更新

-v, --verbose:显示更详细的输出。
-q, --quiet:显示更少的输出。
--all:从所有远程仓库获取更新。
--set-upstream:为后续的 git pull 或 git fetch 命令设置上游分支。
-a, --append:将获取的引用追加到 .git/FETCH_HEAD 文件中,而不是覆盖。
--atomic:利用原子事务来更新引用。
--upload-pack <path>:指定远程真个上传包路径。
-f, --force:逼迫覆盖本地引用。
-m, --multiple:从多个远程仓库获取更新。
-t, --tags:获取所有标签及其关联的工具。
-n:不获取所有标签(--no-tags)。
-j, --jobs <n>:并行获取子模块的数量。
--prefetch:修正引用规范(refspec),将所有引用放置在 refs/prefetch/ 目录下。
-p, --prune:删除不再存在于远程仓库的远程跟踪分支。
-P, --prune-tags:删除不再存在于远程仓库确当地标签,并覆盖已变动的标签。
--recurse-submodules[=<on-demand>]:掌握子模块的递归获取。
--dry-run:仿照运行,不实际获取更新。
--write-fetch-head:将获取的引用写入 FETCH_HEAD 文件。
-k, --keep:保留下载的包文件。
-u, --update-head-ok:许可更新 HEAD 引用。
--progress:逼迫显示进度报告。
--depth <depth>:缩减浅克隆的历史记录深度。
--shallow-since <time>:基于韶光缩减浅克隆的历史记录。
--shallow-exclude <revision>:缩减浅克隆的历史记录,打消指定的提交。
--deepen <n>:增加浅克隆的历史记录深度。
--unshallow:将浅克隆转换为完全的仓库。
--refetch:重新获取更新,而不进行协商共同提交。
--update-shallow:接管更新 .git/shallow 文件的引用。
--refmap <refmap>:指定获取的引用映射。
-o, --server-option <server-specific>:通报给做事器的选项。
-4, --ipv4:仅利用 IPv4 地址。
-6, --ipv6:仅利用 IPv6 地址。
--negotiation-tip <revision>:报告我们只有从该工具可达的工具。
--negotiate-only:不获取包文件,而是打印协商提示的先人。
--filter <args>:工具过滤。
--auto-maintenance:获取更新后运行 maintenance --auto。
--auto-gc:获取更新后运行 maintenance --auto。
--show-forced-updates:检讨所有更新的分支是否有逼迫更新。
--write-commit-graph:获取更新后写入提交图。
--stdin:从标准输入接管引用规范(refspec)。

二十三、GI命令之git mv,移动或重命名文件或目录

-v, --verbose:显示详细的输出信息。
-n, --dry-run:演示运行,不实际实行移动或重命名操作,只显示将要被移动或重命名的文件。
-f, --force:纵然目标文件已经存在,也逼迫进行移动或重命名操作。
-k:跳过移动或重命名时的缺点。
--sparse:许可更新稀疏检出范围之外的条款。

二十四、GI命令之git rm,删除文件或目录

-n, --dry-run:演示运行,不实际实行删除操作,只显示将要被删除的文件。
-q, --quiet:不列出已删除的文件。
--cached:只从索引中删除文件,不删除事情树中的文件。
这将使文件不再被 Git 跟踪。
-f, --force:纵然文件被标记为最新版本,也逼迫删除文件。
-r:许可递归删除,用于删除目录及其内容。
--ignore-unmatch:纵然没有匹配的文件,也以零状态退出。
--sparse:许可更新稀疏检出范围之外的条款。
--pathspec-from-file <file>:从文件中读取路径规范。
--pathspec-file-nul:与 --pathspec-from-file 一起利用,路径规范元素以 NUL 字符分隔。

二十五、.gitignore忽略提交文件

#表示此为注释,将被Git忽略node_modules忽略项目中所有目录名为node_modules 的文件夹,无论它们位于什么位置.a 表示忽略所有 .a 结尾的文件!lib.a 表示但lib.a除外/TODO 表示仅仅忽略项目根目录下的 TODO 文件,不包括subdir/TODObuild/表示忽略build/目录下的所有文件,过滤全体build文件夹;doc/.txt表示会忽略doc/notes.txt但不包括doc/server/arch.txtbin/: 表示忽略当前路径下的bin文件夹,该文件夹下的所有内容都会被忽略,不忽略 bin 文件/bin: 表示忽略根目录下的bin文件/.c: 表示忽略cat.c,不忽略 build/cat.cdebug/.obj: 表示忽略debug/io.obj,不忽略debug/common/io.obj和tools/debug/io.obj/foo:表示忽略/foo,a/foo,a/b/foo等a//b:表示忽略a/b, a/x/b,a/x/y/b等!/bin/run.sh表示不忽略bin目录下的run.sh文件.log:表示忽略所有 .log 文件config.php: 表示忽略当前路径的config.php 文件 /mtk/ 表示过滤全体文件夹.zip 表示过滤所有.zip文件/mtk/do.c 表示过滤某个详细文件#被过滤掉的文件就不会涌如今git仓库中(gitlab或github)了,当然本地库中还有,只是push的时候不会上传。
#须要把稳的是,gitignore还可以指定要将哪些文件添加到版本管理中,如下:!.zip!/mtk/one.txt#唯一的别便是规则开头多了一个感叹号,Git会将知足这类规则的文件添加到版本管理中。
为什么要有两种规则呢?#想象一个场景:如果我们只须要管理/mtk/目录中的one.txt文件,这个目录中的其他文件都不须要管理,那么.gitignore规则应写为::/mtk/!/mtk/one.txt#假设我们只有过滤规则,而没有添加规则,那么我们就须要把/mtk/目录下除了one.txt以外的所有文件都写出来!
#把稳上面的/mtk/不能写为/mtk/,否则父目录被前面的规则打消掉了,one.txt文件虽然加了!过滤规则,也不会生效 ----------------------------------------------------------------------------------还有一些规则如下:fd1/解释:忽略目录 fd1 下的全部内容;把稳,不管是根目录下的 /fd1/ 目录,还是某个子目录 /child/fd1/ 目录,都会被忽略;/fd1/解释:忽略根目录下的 /fd1/ 目录的全部内容; /!.gitignore!/fw/ /fw/!/fw/bin/!/fw/sf/

二十六、GIT常见分支

master分支,即主分支(发布分支)。
任何项目都必须有个这个分支。
对项目进行tag或发布版本等操作,都必须在该分支上进行。
develop分支,即开拓分支,从master分支上检出。
团队成员一样平常不会直接变动该分支,而是分别从该分支检出自己的feature分支,开拓完成后将feature分支上的改动merge回develop分支。
同时release分支由此分支检出。
release分支,即测试分支,从develop分支上检出。
该分支用作发版前的测试,可进行大略的bug修复。
如果bug修复比较繁芜,可merge回develop分支后由其他分支进行bug修复。
此分支测试完成后,须要同时merge到master和develop分支上。
feature分支,即功能分支,从develop分支上检出。
团队成员中每个人都掩护一个自己的feature分支,并进行开拓事情,开拓完成后将此分支merge回develop分支。
此分支一样平常用来开拓新功能或进行项目掩护等。

二十七、创建演示库,以码云为例

在码云上创建yanshi库,克隆下载中可以找到https、ssh等链接

在本地新建yanshi文件夹,打开cmd命令行工具,进入该文件夹

运行git init 初始化仓库,会自动天生.git文件夹

关联远程仓库,运行 git remote add origin 仓库地址

拉取最新代码,git pull origin master

二十八、创建忽略文件.gitignore

打开开拓者工具,创建.gitignore文件,并忽略.idea文件

运行git status,可以看出新增两个文件.gitignore、.idea

运行git add . 把文件添加到缓存区,再运行git status 会创造文件已在缓存区

运行git commit -m 第一次提交,解释这次提交是干嘛的

git push origin master,提交到master分支,git push 之前需运行git pull获取下分支,避免冲突

码云查看仓库,会创造idea并未提交

二十九、办理冲突

在本地新建yanshi1库,根据之前操作关联远程仓库yashi

在本地yanshi库,新建test.html,并提交到远程库

在本地yanshi1库运行git pull maser获取远程库,并修正test.html,并提交到远程库

在本地yanshi库,修正test.html标题,当git pull origin master时,会创造CONFLICT (content): Merge conflict in test.html,解释test.html有冲突,在test.html文件中会创造<<<<<<< HEAD是该库修正的部分,而>>>>>>> 28133df53ae47ecacb4ccec38435a58b683a329c是之前yanshi1提交的,后面一串数子是提交的id

根据须要保留精确的代码,这里删除>>>>>>> 28133df53ae47ecacb4ccec38435a58b683a329c 代码,保留<<<<<<< HEAD代码,再运行git add . 、git commit、git push 等命令即可

在本地yanshi1库运行git pull maser获取远程库,查看test.html,会创造标题已经改变

三十、分支管理

在码云找到yanshi仓库,新建release、develop分支,release测试分支、develop开拓分支

运行git featch获取远程分支的最新信息,再运行git branch -r 会看到远程分支

运行git checkout develop切换到开拓分支

运行git switch -c feature,在本地新建功能分支,并切换到该分支,切换到分支后修正test.html,并运行git add、git commit命令,在功能分支上不做push

运行git checkout develop切换到开拓分支,git merge feature合并分支,然后运行git push origin develop命令

如果开拓已经完成,准备测试,须要切换到git checkout release分支,并运行git merge develop,再运行git push origin release推送到远程release分支;测试通过之后,须要发布上线,须要切换到git checkout master分支,并运行git merge release,再运行git push origin master推送到master分支;如果发布成功后,没有其他bug,须要固定版本的时候,就须要打标签(建立标签分支),创建对应的版本,利用git tag命令的是如果直接在仓库上删除标签分支,在本地运行git tag还是可以看到该分支的,须要在本地运行git tag -d V0.0.0删除该分支,也可以运行git push origin :refs/tags/删除分支避免此问题

三十一、办理分支冲突

在本地yanshi1库,运行git switch -c test 新建功能分支,并切换到test分支,并修正test.html

运行git add、git commit将修正的内容保存到仓库

运行git checkout develop切换到开拓分支,git merge test合并分支,然后运行git push origin develop命令在本地yanshi库切换到功能分支feature,修正test.html,再运行git add、git commit将修正的内容保存到仓库

运行git checkout develop切换到开拓分支,git merge feature合并分支,然后运行git pull origin develop命令,会创造CONFLICT (content): Merge conflict in test.html,解释test.html冲突,按照之前的方法办理冲突,运行git push origin develop推送到develop即可

三十二、总结

git命令虽然很多,但是常用的无非那几个,分支管理运行命令虽然比较繁芜,但是会让你的项目管理起来更有条理。
现在开拓工具上基本都包含git的集成,只须要对相应的开拓者工具配置即可,不过还是要理解下干系命令,要不然就算利用开拓者工具里面集成的,看着菜单也会不知道哪个菜单是用来干嘛的,这是webstrom集成的git还是很好用的