一、简介
Git是一个分布式版本控制系统,用于跟踪文件和文件夹的变化。它最初由Linus Torvalds在2005年创建,用于管理Linux内核的开发。Git的设计目标是速度、数据完整性和支持分布式、非线性工作流程。
与集中式版本控制系统(如SVN)不同,Git将代码仓库完全复制到每个开发者的本地计算机上,每个开发者都具有完整的代码历史记录和版本信息。这种分布式的特性使得开发者可以在没有网络连接的情况下进行工作,并且可以更轻松地处理分支、合并和代码冲突等操作。
Git使用"提交"(commit)的机制来记录文件和文件夹的变化。每次提交都包含一个快照,记录了所有被修改的文件的状态。通过提交,开发者可以轻松地回溯代码的历史、比较不同版本之间的差异,并且可以在需要时恢复到特定的版本。
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
:更改上游信息。 - --unset-upstream:取消上游信息。
- --color[=
]:使用彩色输出。 - -r, --remotes:操作远程跟踪分支。
- --contains
:仅显示包含指定提交的分支。 - --no-contains
:仅显示不包含指定提交的分支。 - --abbrev[=
]:使用 个数字显示对象名称 - -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[=