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

47 篇文章 4 订阅
一、简介

Git是一个分布式版本控制系统,用于跟踪文件和文件夹的变化。它最初由Linus Torvalds在2005年创建,用于管理Linux内核的开发。Git的设计目标是速度、数据完整性和支持分布式、非线性工作流程。
与集中式版本控制系统(如SVN)不同,Git将代码仓库完全复制到每个开发者的本地计算机上,每个开发者都具有完整的代码历史记录和版本信息。这种分布式的特性使得开发者可以在没有网络连接的情况下进行工作,并且可以更轻松地处理分支、合并和代码冲突等操作。
Git使用"提交"(commit)的机制来记录文件和文件夹的变化。每次提交都包含一个快照,记录了所有被修改的文件的状态。通过提交,开发者可以轻松地回溯代码的历史、比较不同版本之间的差异,并且可以在需要时恢复到特定的版本。
Git还提供了强大的分支功能,允许开发者创建和切换不同的分支来独立开发新功能或修复错误。分支可以合并回主线,以便将不同的工作合并到一起。
除了基本的版本控制功能外,Git还提供了许多其他功能,如标签(tagging)、快速前进/回滚、远程仓库同步等。它也有丰富的命令行工具和图形用户界面(GUI)工具来支持开发者的工作流程。
Git已经成为广泛使用的版本控制系统,不仅仅用于开源项目,许多企业和个人开发者也采用Git来管理和追踪他们的代码。它的灵活性、性能和强大的功能使得它成为现代软件开发中不可或缺的工具之一。

二、安装

访问官网:https://git-scm.com/downloads下载,根据提示安装即可
在这里插入图片描述

三、GIT选项及参数

1.git -v,git --version:显示版本信息
2.git -h,git --help:显示git帮助信息
3.git -C :指定Git操作的工作目录
4.git -c =:设置临时的配置选项。
5.git --exec-path[= ]:显示或设置Git的可执行文件路径。
6.git --html-path:显示Git的HTML文档路径。
7.git --man-path:显示Git的man手册路径。
8.git --info-path:显示Git的info文档路径。
9.git [-p | --paginate | -P | --no-pager]:控制Git命令的分页显示方式。
10.git --no-replace-objects:禁止自动替换Git对象。
11.git --bare:指定Git仓库为裸仓库。
12.git --git-dir= :指定Git仓库的路径。
13.git --work-tree= :指定Git工作树的路径。
14.git --namespace=:指定Git命名空间。
15.git --config-env==:设置环境变量来覆盖Git配置。
16.git :要执行的Git命令。

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

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

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

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

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

1.-v, --verbose:显示更详细的信息。
2.-q, --quiet:显示更少的信息。
3.–progress:强制显示进度报告。
4.–recurse-submodules[=]:控制是否递归获取子模块。
5.-r, --rebase[=(false|true|merges|interactive)]:使用变基而不是合并来合并更改。
6.-n:在合并结束时不显示 diffstat。
7.–stat:在合并结束时显示 diffstat。
8.–log[=]:将 shortlog 中的(最多 条)条目添加到合并提交消息中。
9.–signoff[=…]:添加一个 Signed-off-by 尾注。
10.–squash:创建一个单一的提交,而不进行合并。
11.–commit:如果合并成功,则执行提交(默认行为)。
12.–edit:在提交之前编辑提交消息。
13.–cleanup :控制如何从消息中删除空格和 # 注释。
14.–ff:允许快进合并。
15.–ff-only:如果无法进行快进合并,则中止。
16.–verify:控制使用 pre-merge-commit 和 commit-msg 钩子。
17.–verify-signatures:验证指定提交是否具有有效的 GPG 签名。
18.–autostash:在合并前后自动进行暂存和恢复暂存。
19.-s, --strategy :要使用的合并策略。
20.-X, --strategy-option <option=value>:选定合并策略的选项。
21.-S, --gpg-sign[=]:GPG 对提交进行签名。
22.–allow-unrelated-histories:允许合并不相关的历史。
23.–all:从所有远程仓库获取。
24.-a, --append:追加到 .git/FETCH_HEAD 而不是覆盖。
25.–upload-pack :远程端的 upload pack 路径。
26.-f, --force:强制覆盖本地分支。
27.-t, --tags:获取所有标签及其关联的对象。
28.-p, --prune:删除不再存在于远程的跟踪分支。
29.-j, --jobs[=]:并行获取的子模块数量。
30.–dry-run:演示运行,不实际执行操作。
31.-k, --keep:保留下载的 pack 文件。
32.–depth :减少浅克隆的历史深度。
33.–shallow-since

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

1.-v, --verbose:显示更详细的输出信息。
2.-q, --quiet:显示更少的输出信息。
3.–progress:强制显示克隆进度报告。
4.–reject-shallow:不克隆浅层仓库。
5.-n, --no-checkout:不创建检出(不创建工作树)。
6.–bare:创建一个裸仓库,即没有工作树的仓库。
7.–mirror:创建一个镜像仓库,相当于–bare的别名。
8.-l, --local:从本地仓库克隆。
9.–no-hardlinks:不使用硬链接,始终复制文件。
10.-s, --shared:设置为共享仓库。
11.–recurse-submodules[=]:在克隆时初始化子模块。
12.–recursive[=]:–recurse-submodules的别名。
13.-j, --jobs :并行克隆的子模块数量。
14.–template :指定一个目录作为模板目录,Git会从该目录中复制文件到新创建的仓库中。
15.–reference :指定参考仓库。
16.–reference-if-able :指定参考仓库。
17.–dissociate:在克隆时仅使用–reference选项。
18.-o, --origin :使用指定的名称来跟踪上游仓库,默认为origin。
19.-b, --branch :检出指定的分支,默认为远程仓库的HEAD。
20.-u, --upload-pack :指定远程的git-upload-pack路径。
21.–depth :创建一个指定深度的浅层克隆。
22.–shallow-since

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

1.git branch dev:创建分支
2.-v, --verbose:显示哈希值和提交主题,使用两次显示上游分支。
3.-q, --quiet:禁止显示信息性消息。
4.-t, --track[=(direct|inherit)]:设置分支的跟踪配置。
5.-u, --set-upstream-to :更改上游信息。
6.–unset-upstream:取消上游信息。
7.–color[=]:使用彩色输出。
8.-r, --remotes:操作远程跟踪分支。
9.–contains :仅显示包含指定提交的分支。
10.–no-contains :仅显示不包含指定提交的分支。
11.–abbrev[=]:使用 个数字显示对象名称
12.-a, --all:列出本地分支和远程跟踪分支。
13.-d, --delete:删除已完全合并的分支。
14.-D:删除分支,即使它未完全合并。
15.-m, --move:移动/重命名分支及其引用日志。
16.-M:即使目标分支存在,也移动/重命名分支。
17.-c, --copy:复制分支及其引用日志。
18.-C:即使目标分支存在,也复制分支。
19.-l, --list:列出分支名称。
20.–show-current:显示当前分支名称。
21.–create-reflog:创建分支的引用日志。
22.–edit-description:编辑分支的描述。
23.-f, --force:强制创建、移动/重命名、删除分支。
24.–merged :仅显示已合并的分支。
25.–no-merged :仅显示未合并的分支。
26.–column[=

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

1.-A, --all, . :添加所有已跟踪和未跟踪文件的更改。
2.-n, --dry-run:演示运行,不实际执行添加操作,只显示将要被添加的文件。
3.-v, --verbose:显示详细的输出信息。
4.-i, --interactive:交互式选择要添加的文件。
5.-p, --patch:交互式选择要添加的文件补丁(hunks)。
6.-e, --edit:编辑当前的差异(diff)并进行添加。
7.-f, --force:允许添加被忽略的文件。
8.-u, --update:更新已跟踪的文件。
9.–renormalize:重新规范化已跟踪文件的行尾(EOL),相当于-u的别名。
10.-N, --intent-to-add:仅记录将来要添加的路径。
11.–ignore-removal:忽略工作树中已删除的文件(与–no-all相同)。
12.–refresh:仅刷新索引,不进行添加操作。
13.–ignore-errors:跳过因错误而无法添加的文件。
14.–ignore-missing:在演示运行中检查(即使缺失的)文件是否被忽略。
15.–sparse:允许更新稀疏检出范围之外的条目。
16.–chmod (+|-)x:覆盖指定文件的可执行位。
17.–pathspec-from-file :从文件中读取路径规范(pathspec)。
18.–pathspec-file-nul:与–pathspec-from-file一起使用,路径规范元素以NUL字符分隔。

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

1.-q, --quiet:在成功提交后禁止显示摘要信息。
2.-v, --verbose:在提交消息模板中显示差异。
3.-F, --file :从文件中读取提交消息。
4.–author :覆盖提交的作者信息。
5.–date :覆盖提交的日期。
6.-m, --message :提交消息。
7.-c, --reedit-message :重用并编辑指定提交的消息。
8.-C, --reuse-message :重用指定提交的消息。
9.–fixup [(amend|reword):]:使用自动修复格式的消息来修复或修改指定的提交。
10.–squash :使用自动压缩格式的消息来压缩指定的提交。
11.–reset-author:将提交的作者更改为当前用户(与 -C/-c/–amend 一起使用)。
12.–trailer :添加自定义的 trailer。
13.-s, --signoff:添加一个 Signed-off-by trailer。
14.-t, --template :使用指定的模板文件。
15.-e, --edit:强制编辑提交。
16.–cleanup :指定如何清除消息中的空格和 # 注释。
17.–status:在提交消息模板中包含状态信息。
18.-S, --gpg-sign[=]:对提交进行 GPG 签名。
19.-a, --all:提交所有已更改的文件。
20.-i, --include:将指定的文件添加到索引以进行提交。
21.–interactive:交互式地添加文件。
22.-p, --patch:交互式地添加更改。
23.-o, --only:仅提交指定的文件。
24.-n, --no-verify:绕过 pre-commit 和 commit-msg 钩子。
25.–dry-run:显示将要提交的内容。
26.–short:简洁地显示状态。
27.–branch:显示分支信息。
28.–ahead-behind:计算完整的 ahead/behind 值。
29.–porcelain:以机器可读的格式输出。
30.–long:以详细格式显示状态(默认)。
31.-z, --null:以 NUL 结束条目。
32.–amend:修改上一次提交。
33.–no-post-rewrite:绕过 post-rewrite 钩子。
34.-u, --untracked-files[=]:显示未跟踪的文件,可选模式:all、normal、no(默认为 all)。
35.–pathspec-from-file :从文件中读取路径规范。
36.–pathspec-file-nul:与 --pathspec-from-file 一起使用,路径规范元素使用 NUL 字符分隔。

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

1.-v, --verbose:显示详细的输出信息。
2.-q, --quiet:显示更少的输出信息。
3.–repo :指定仓库。
4.–all:推送所有引用(refs)。
5.–mirror:镜像推送所有引用。
6.-d, --delete:删除引用。
7.–tags:推送标签(不能与 --all 或 --mirror 一起使用)。
8.-n, --dry-run:执行干运行,不实际推送。
9.–porcelain:以机器可读的格式输出。
10.-f, --force:强制更新。
11.–force-with-lease[=:]:要求引用的旧值与指定的值相同。
12.–force-if-includes:要求远程更新在本地已集成。
13.–recurse-submodules (check|on-demand|no):控制递归推送子模块。
14.–thin:使用瘦包。
15.–receive-pack :指定接收包程序。
16.–exec :指定接收包程序。
17.-u, --set-upstream:为 git pull 和 git status 设置上游。
18.–progress:强制显示进度报告。
19.–prune:修剪本地删除的引用。
20.–no-verify:绕过预推钩子。
21.–follow-tags:推送缺失但相关的标签。
22.–signed[=(yes|no|if-asked)]:对推送进行 GPG 签名。
23.–atomic:在远程端请求原子事务。
24.-o, --push-option :传输选项。
25.-4, --ipv4:仅使用 IPv4 地址。
26.-6, --ipv6:仅使用 IPv6 地址。

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

1.-s, --source :指定要从中检出文件的树对象(tree-ish)。
2.-S, --staged:还原暂存区中的文件。这会将文件的内容还原为最近一次提交时的状态。
3.-W, --worktree:还原工作树中的文件。这会将文件的内容还原为最近一次提交时的状态。
4.–ignore-unmerged:忽略未合并的条目。
5.–overlay:使用叠加模式进行还原。
6.-q, --quiet:不显示进度报告。
7.–recurse-submodules[=]:控制对子模块的递归更新。
8.–progress:强制显示进度报告。
9.-m, --merge:对于未合并的文件,执行三方合并。
10.–conflict

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

1.-b :创建并切换到一个新分支。
2.-B :创建或重置并切换到一个分支。
3.-l:为新分支创建引用日志。
4.–guess:对于不存在的分支,进行二次猜测(默认行为)。
5.–overlay:使用覆盖模式(默认行为)。
6.-q, --quiet:禁止显示进度报告。
7.–recurse-submodules[=]:控制递归更新子模块。
8.–progress:强制显示进度报告。
9.-m, --merge:执行与新分支的三方合并。
10.–conflict

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

1.-n:在合并结束时不显示diffstat。
2.–stat:在合并结束时显示diffstat。
3.–summary:–stat的同义词。
4.–log[=]:将短日志中的(最多个)条目添加到合并提交消息中。
5.–squash:创建一个单独的提交,而不是执行合并操作。
6.–commit:如果合并成功,则执行提交(默认行为)。
7.-e, --edit:在提交之前编辑消息。
8.–cleanup :指定如何从消息中去除空格和#注释。
9.–ff:允许快进合并(默认行为)。
10.–ff-only:如果无法进行快进合并,则中止。
11.–rerere-autoupdate:如果可能,使用重用的冲突解决更新索引。
12.–verify-signatures:验证指定的提交是否具有有效的GPG签名。
13.-s, --strategy :指定要使用的合并策略。
14.-X, --strategy-option <option=value>:为选择的合并策略指定选项。
15.-m, --message :合并提交的消息(用于非快进合并)。
16.-F, --file :从文件中读取合并提交的消息。
17.–into-name :使用替代实际目标。
18.-v, --verbose:显示更详细的输出。
19.-q, --quiet:显示更少的输出。
20.–abort:中止当前正在进行的合并操作。
21.–quit:–abort的变体,但保留索引和工作树。
22.–continue:继续当前正在进行的合并操作。
23.–allow-unrelated-histories:允许合并不相关的历史记录。
24.–progress:强制显示进度报告。
25.-S, --gpg-sign[=]:对提交进行GPG签名。
26.–autostash:在合并之前和之后自动进行存储/恢复操作。
27.–overwrite-ignore:更新被忽略的文件(默认行为)。
28.–signoff:添加一个Signed-off-by签名行。
29.–no-verify:绕过pre-merge-commit和commit-msg钩子。

十六、git命令之git log,显示提交历史记录

1.-q, --quiet:抑制差异输出。
2.–source:显示源信息。
3.–use-mailmap:使用邮件映射文件。
4.–mailmap:–use-mailmap的别名。
5.–clear-decorations:清除先前定义的所有装饰过滤器。
6.–decorate-refs :只装饰与匹配的引用。
7.–decorate-refs-exclude :不装饰与匹配的引用。
8.–decorate[=…]:装饰选项。
9.-L range:file:跟踪指定文件中行范围,或函数:的演变

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

1.-q, --quiet:静默模式,只报告错误。
2.–no-refresh:重置后跳过刷新索引。
3.–mixed:重置HEAD和索引。
4.–soft:仅重置HEAD。
5.–hard:重置HEAD、索引和工作树。
6.–merge:重置HEAD、索引和工作树。
7.–keep:重置HEAD,但保留本地更改。
8.–recurse-submodules[=]:控制递归更新子模块。
9.-p, --patch:交互式选择差异块。
10.-N, --intent-to-add:仅记录已删除的路径将来将被添加。
11.–pathspec-from-file :从文件中读取路径规范。
12.–pathspec-file-nul:与–pathspec-from-file一起使用,路径规范元素使用NUL字符分隔。
13.-z:已弃用(请改用–pathspec-file-nul),路径使用NUL字符分隔。
14.–stdin:已弃用(请改用–pathspec-from-file=-),从标准输入中读取路径

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

1.-p, --patch:生成补丁。
2.-s, --no-patch:禁止差异输出。
3.-u:生成补丁。
4.-U, --unified[=]:生成带有 行上下文的差异。
5.-W, --function-context:生成带有 行上下文的差异。
6.–raw:以原始格式生成差异。
7.–patch-with-raw:-p --raw 的同义词。
8.–patch-with-stat:-p --stat 的同义词。
9.–numstat:机器友好的 --stat。
10.–shortstat:仅输出 --stat 的最后一行。
11.-X, --dirstat[=<param1,param2>…]:输出每个子目录中更改量的分布情况。
12.–cumulative:–dirstat=cumulative 的同义词。
13.–dirstat-by-file[=<param1,param2>…]:–dirstat=files,param1,param2… 的同义词。
14.–check:如果更改引入冲突标记或空白错误,则发出警告。
15.–summary:压缩的摘要,例如创建、重命名和模式更改。
16.–name-only:仅显示更改文件的名称。
17.–name-status:仅显示更改文件的名称和状态。
18.–stat[=[,[,]]]:生成差异统计信息。
19.–stat-width :以给定宽度生成差异统计信息。
20.–stat-name-width :以给定名称宽度生成差异统计信息。
21.–stat-graph-width :以给定图形宽度生成差异统计信息。
22.–stat-count :生成有限行数的差异统计信息。
23.–compact-summary:以差异统计信息的紧凑形式生成摘要。
24.–binary:输出可应用的二进制差异。
25.–full-index:在“index”行上显示完整的前图像和后图像对象名称。
26.–color[=]:显示带颜色的差异。
27.–ws-error-highlight :在差异中的“context”、“old”或“new”行中突出显示空白错误。
28.-z:在 --raw 或 --numstat 中不修改路径名,并使用 NUL 作为输出字段的终止符。
29.–abbrev[=]:使用 个数字显示对象名称。
30.–src-prefix :显示给定的源前缀,而不是 “a/”。
31.–dst-prefix :显示给定的目标前缀,而不是 “b/”。
32.–line-prefix :在每行输出前添加额外的前缀。
33.–no-prefix:不显示任何源或目标前缀。
34.–inter-hunk-context :在差异块之间显示指定行数的上下文。
35.–output-indicator-new :指定用于表示新行的字符,而不是 “+”。
36.–output-indicator-old :指定用于表示旧行的字符,而不是 “-”。
37.–output-indicator-context :指定用于表示上下文的字符,而不是空格。
38.-B, --break-rewrites[=[/]]:将完全重写的更改拆分为删除和创建。
39.-M, --find-renames[=]:检测重命名。
40.-D, --irreversible-delete:省略删除的预映像。
41.-C, --find-copies[=]:检测复制。
42.–find-copies-harder:使用未修改的文件作为复制的源。
43.–no-renames:禁用重命名检测。
44.–rename-empty:使用空的 blob 作为重命名源
45.–follow:在重命名后继续列出文件的历史记录。
46.-l :如果重命名/复制目标的数量超过给定限制,则阻止重命名/复制检测。
47.–minimal:生成最小可能的差异。
48.-w, --ignore-all-space:在比较行时忽略空格。
49.-b, --ignore-space-change:忽略空格数量的更改。
50.–ignore-space-at-eol:忽略行尾的空格更改。
51.–ignore-cr-at-eol:忽略行尾的回车符。
52.–ignore-blank-lines:忽略所有行都为空白的更改。
53.-I, --ignore-matching-lines :忽略所有行都匹配 的更改。
54.–indent-heuristic:启发式地移动差异块边界以便于阅读。
55.–patience:使用 “patience diff” 算法生成差异。
56.–histogram:使用 “histogram diff” 算法生成差异。
57.–diff-algorithm :选择差异算法。
58.–anchored :使用 “anchored diff” 算法生成差异。
59.–word-diff[=]:显示单词差异,使用 来分隔更改的单词。
60.–word-diff-regex :使用 来定义单词。
61.–color-words[=]:相当于 --word-diff=color --word-diff-regex=。
62.–color-moved[=]:移动的代码行以不同的颜色显示。
63.–color-moved-ws :在 --color-moved 中如何忽略空格
64.–relative[=]:在子目录中运行时,排除外部更改并显示相对路径。
65.-a, --text:将所有文件视为文本。
66.-R:交换两个输入,反转差异。
67.–exit-code:如果存在差异,则以 1 退出,否则为 0。
68.–quiet:禁用程序的所有输出。
69.–ext-diff:允许执行外部差异辅助程序。
70.–textconv:在比较二进制文件时运行外部文本转换过滤器。
71.–ignore-submodules[=]:在生成差异时忽略子模块的更改。
72.–submodule[=]:指定如何显示子模块的差异。
73.–ita-invisible-in-index:从索引中隐藏 ‘git add -N’ 条目。
74.–ita-visible-in-index:将 ‘git add -N’ 条目视为索引中的实际条目。
75.-S :查找更改指定字符串的出现次数。
76.-G :查找更改指定正则表达式的出现次数。
77.–pickaxe-all:显示使用 -S 或 -G 的更改集中的所有更改。
78.–pickaxe-regex:将 -S 中的 视为扩展的 POSIX 正则表达式。
79.-O :控制输出中文件的顺序。
80.–rotate-to :首先显示指定路径的更改。
81.–skip-to :跳过输出直到指定路径。
82.–find-object :查找更改指定对象的出现次数。
83.–diff-filter [(A|C|D|M|R|T|U|X|B)…[*]]:按差异类型选择文件。
84.–output :输出到指定的文件。

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

1.–global:使用全局配置文件。
2.–system:使用系统配置文件。
3.–local:使用仓库配置文件。
4.–worktree:使用每个工作树的配置文件。
5.-f, --file :使用指定的配置文件。
6.–blob :从给定的 blob 对象读取配置。
7.–get:获取值:name [value-pattern]。
8.–get-all:获取所有值:key [value-pattern]。
9.–get-regexp:获取正则表达式匹配的值:name-regex [value-pattern]。
10.–get-urlmatch:获取特定于 URL 的值:section[.var] URL。
11.–replace-all:替换所有匹配的变量:name value [value-pattern]。
12.–add:添加新变量:name value。
13.–unset:移除变量:name [value-pattern]。
14.–unset-all:移除所有匹配项:name [value-pattern]。
15.–rename-section:重命名部分:old-name new-name。
16.–remove-section:移除部分:name。
17.-l, --list:列出所有配置。
18.–fixed-value:在比较值与 ‘value-pattern’ 时使用字符串相等性。
19.-e, --edit:打开编辑器。
20.–get-color:查找配置的颜色:slot [default]。
21.–get-colorbool:查找颜色设置:slot [stdout-is-tty]。
22.-t, --type :给定值的类型。
23.–bool:值为 “true” 或 “false”。
24.–int:值为十进制数。
25.–bool-or-int:值为 --bool 或 --int。
26.–bool-or-str:值为 --bool 或字符串。
27.–path:值为路径(文件或目录名)。
28.–expiry-date:值为到期日期。
29.-z, --null:以 NUL 字节终止值。
30.–name-only:仅显示变量名称。
31.–includes:在查找时考虑包含指令。
32.–show-origin:显示配置的来源(文件、标准输入、blob、命令行)。
33.–show-scope:显示配置的范围(工作树、本地、全局、系统、命令)。
34.–default :在使用 --get 时,当条目缺失时使用默认值。

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

1.-a, --annotate:创建带注释的标签,需要提供消息。
2.-m, --message :设置标签消息。
3.-F, --file :从文件中读取消息。
4.-e, --edit:强制编辑标签消息。
5.-s, --sign:创建带注释和 GPG 签名的标签。
6.–cleanup :设置如何清除消息中的空格和 # 注释。
7.-u, --local-user :使用另一个密钥进行签名。
8.-f, --force:如果标签存在,则替换标签。
9.–create-reflog:创建引用日志。
10.-l, --list:列出标签名称。
11.-n[]:打印每个标签消息的 行。
12.-d, --delete:删除标签。
13.-v, --verify:验证标签。
14.–column[=

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

1.-v, --verbose:提供详细的输出信息。
2.-s, --short:以简洁方式显示状态信息。
3.-b, --branch:显示分支信息。
4.–show-stash:显示存储区(stash)的信息。
5.–ahead-behind:计算完整的 ahead/behind 值。
6.–porcelain[=]:以机器可读的格式输出。
7.–long:以详细格式显示状态信息(默认格式)。
8.-z, --null:以 NUL 终止条目。
9.-u, --untracked-files[=]:显示未跟踪文件,可选模式:all、normal、no(默认为 all)。
10.–ignored[=]:显示被忽略的文件,可选模式:traditional、matching、no(默认为 traditional)。
11.–ignore-submodules[=]:忽略子模块的更改,可选 when:all、dirty、untracked(默认为 all)。
12.–column[=

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

1.-v, --verbose:显示更详细的输出。
2.-q, --quiet:显示更少的输出。
3.–all:从所有远程仓库获取更新。
4.–set-upstream:为后续的 git pull 或 git fetch 命令设置上游分支。
5.-a, --append:将获取的引用追加到 .git/FETCH_HEAD 文件中,而不是覆盖。
6.–atomic:使用原子事务来更新引用。
7.–upload-pack :指定远程端的上传包路径。
8.-f, --force:强制覆盖本地引用。
9.-m, --multiple:从多个远程仓库获取更新。
10.-t, --tags:获取所有标签及其关联的对象。
11.-n:不获取所有标签(–no-tags)。
12.-j, --jobs :并行获取子模块的数量。
13.–prefetch:修改引用规范(refspec),将所有引用放置在 refs/prefetch/ 目录下。
14.-p, --prune:删除不再存在于远程仓库的远程跟踪分支。
15.-P, --prune-tags:删除不再存在于远程仓库的本地标签,并覆盖已更改的标签。
16.–recurse-submodules[=]:控制子模块的递归获取。
17.–dry-run:模拟运行,不实际获取更新。
18.–write-fetch-head:将获取的引用写入 FETCH_HEAD 文件。
19.-k, --keep:保留下载的包文件。
20.-u, --update-head-ok:允许更新 HEAD 引用。
21.–progress:强制显示进度报告。
22.–depth :缩减浅克隆的历史记录深度。
23.–shallow-since

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

1.-v, --verbose:显示详细的输出信息。
2.-n, --dry-run:演示运行,不实际执行移动或重命名操作,只显示将要被移动或重命名的文件。
3.-f, --force:即使目标文件已经存在,也强制进行移动或重命名操作。
4.-k:跳过移动或重命名时的错误。
5.–sparse:允许更新稀疏检出范围之外的条目。

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

1.-n, --dry-run:演示运行,不实际执行删除操作,只显示将要被删除的文件。
2.-q, --quiet:不列出已删除的文件。
3.–cached:只从索引中删除文件,不删除工作树中的文件。这将使文件不再被 Git 跟踪。
4.-f, --force:即使文件被标记为最新版本,也强制删除文件。
5.-r:允许递归删除,用于删除目录及其内容。
6.–ignore-unmatch:即使没有匹配的文件,也以零状态退出。
7.–sparse:允许更新稀疏检出范围之外的条目。
8.–pathspec-from-file :从文件中读取路径规范。
9.–pathspec-file-nul:与 --pathspec-from-file 一起使用,路径规范元素以 NUL 字符分隔。

二十五、.gitignore忽略提交文件
#表示此为注释,将被Git忽略

node_modules忽略项目中所有目录名为node_modules 的文件夹,无论它们位于什么位置

*.a  表示忽略所有 .a 结尾的文件

!lib.a  表示但lib.a除外

/TODO  表示仅仅忽略项目根目录下的 TODO 文件,不包括subdir/TODO

build/表示忽略build/目录下的所有文件,过滤整个build文件夹;

doc/*.txt表示会忽略doc/notes.txt但不包括doc/server/arch.txt

bin/: 表示忽略当前路径下的bin文件夹,该文件夹下的所有内容都会被忽略,不忽略 bin 文件

/bin: 表示忽略根目录下的bin文件

/*.c: 表示忽略cat.c,不忽略 build/cat.c

debug/*.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常见分支

在这里插入图片描述
1.master分支,即主分支(发布分支)。任何项目都必须有个这个分支。对项目进行tag或发布版本等操作,都必须在该分支上进行。
2.develop分支,即开发分支,从master分支上检出。团队成员一般不会直接更改该分支,而是分别从该分支检出自己的feature分支,开发完成后将feature分支上的改动merge回develop分支。同时release分支由此分支检出。
3.release分支,即测试分支,从develop分支上检出。该分支用作发版前的测试,可进行简单的bug修复。如果bug修复比较复杂,可merge回develop分支后由其他分支进行bug修复。此分支测试完成后,需要同时merge到master和develop分支上。
4.feature分支,即功能分支,从develop分支上检出。团队成员中每个人都维护一个自己的feature分支,并进行开发工作,开发完成后将此分支merge回develop分支。此分支一般用来开发新功能或进行项目维护等。

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

1.在码云上创建yanshi库,克隆下载中可以找到https、ssh等链接
在这里插入图片描述
2.在本地新建yanshi文件夹,打开cmd命令行工具,进入该文件夹
在这里插入图片描述
3.运行git init 初始化仓库,会自动生成.git文件夹
在这里插入图片描述
4.关联远程仓库,运行 git remote add origin 仓库地址
在这里插入图片描述
5.拉取最新代码,git pull origin master
在这里插入图片描述

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

1.打开开发者工具,创建.gitignore文件,并忽略.idea文件
在这里插入图片描述
2.运行git status,可以看出新增两个文件.gitignore、.idea
在这里插入图片描述
3.运行git add . 把文件添加到缓存区,再运行git status 会发现文件已在缓存区
在这里插入图片描述
4.运行git commit -m 第一次提交,说明此次提交是干嘛的
在这里插入图片描述
5.git push origin master,提交到master分支,git push 之前需运行git pull获取下分支,避免冲突
在这里插入图片描述
6.码云查看仓库,会发现idea并未提交
在这里插入图片描述

二十九、解决冲突

1.在本地新建yanshi1库,根据之前操作关联远程仓库yashi
在这里插入图片描述
2.在本地yanshi库,新建test.html,并提交到远程库
在这里插入图片描述
3.在本地yanshi1库运行git pull maser获取远程库,并修改test.html,并提交到远程库
在这里插入图片描述
4.在本地yanshi库,修改test.html标题,当git pull origin master时,会发现CONFLICT (content): Merge conflict in test.html,说明test.html有冲突,
在test.html文件中会发现<<<<<<< HEAD是该库修改的部分,而>>>>>>> 28133df53ae47ecacb4ccec38435a58b683a329c是之前yanshi1提交的,后面一串数子是提交的id
在这里插入图片描述
5.根据需要保留正确的代码,这里删除>>>>>>> 28133df53ae47ecacb4ccec38435a58b683a329c 代码,保留<<<<<<< HEAD代码,再运行git add . 、git commit、git push 等命令即可
在这里插入图片描述
6.在本地yanshi1库运行git pull maser获取远程库,查看test.html,会发现标题已经改变
在这里插入图片描述

三十、分支管理

1.在码云找到yanshi仓库,新建release、develop分支,release测试分支、develop开发分支
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
2.运行git featch获取远程分支的最新信息,再运行git branch -r 会看到远程分支
在这里插入图片描述
3.运行git checkout develop切换到开发分支
在这里插入图片描述
4.运行git switch -c feature,在本地新建功能分支,并切换到该分支,切换到分支后修改test.html,并运行git add、git commit命令,在功能分支上不做push
在这里插入图片描述
5.运行git checkout develop切换到开发分支,git merge feature合并分支,然后运行git push origin develop命令
在这里插入图片描述
6.如果开发已经完成,准备测试,需要切换到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/删除分支避免此问题
在这里插入图片描述在这里插入图片描述

三十一、解决分支冲突

1.在本地yanshi1库,运行git switch -c test 新建功能分支,并切换到test分支,并修改test.html
在这里插入图片描述
2.运行git add、git commit将修改的内容保存到仓库
在这里插入图片描述
3.运行git checkout develop切换到开发分支,git merge test合并分支,然后运行git push origin develop命令
4.在本地yanshi库切换到功能分支feature,修改test.html,再运行git add、git commit将修改的内容保存到仓库
在这里插入图片描述
5.运行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还是很好用的
在这里插入图片描述

  • 19
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值