2025年git用法教程(git基本用法)

git用法教程(git基本用法)欢迎来到我关于 Git 的综合指南 Git 是一种分布式版本控制系统 已经在软件开发中彻底改变了协作和代码管理方式 无论你是经验丰富的开发者还是刚开始编程之旅的新手 理解 Git 对于正确掌控代码 高效管理项目和与他人合作至关重要 在本教程中 我将带领你了解 Git 的基础知识 涵盖从基本工作流程到高级分支策略和重新基础技术的所有内容 通过本指南 你将对 Git 的核心概念有扎实的理解

大家好,我是讯享网,很高兴认识大家。



欢迎来到我关于 Git 的综合指南,Git 是一种分布式版本控制系统,已经在软件开发中彻底改变了协作和代码管理方式。

无论你是经验丰富的开发者还是刚开始编程之旅的新手,理解 Git 对于正确掌控代码、高效管理项目和与他人合作至关重要。

在本教程中,我将带领你了解 Git 的基础知识,涵盖从基本工作流程到高级分支策略和重新基础技术的所有内容。

通过本指南,你将对 Git 的核心概念有扎实的理解,并且具备自信和良好的技能,能够在你的开发工作流程中有效地使用它。

(本文内容参考:java567.com)

你只需要带着一颗好奇和渴望学习的心态来参与。本指南是针对初学者精心设计的,因此不需要对版本控制系统或编程有任何先前的知识。无论你是完全的新手还是有一些编程经验,你都会发现本教程易于理解和跟随。

Git 是一种分布式版本控制系统,能够帮助你和你的团队有效地进行协作,同时保持项目历史记录的安全。它就像是为你的代码建立了一个时间机器!

让 Git 与其他工具有所区别的重要因素是它对数据的理解方式。Git 不是将文件的更改保存起来,而是将项目的数据视为一系列快照,也就是说,每当你进行更改并保存(提交)时,Git 就会在那一刻对所有文件进行快照。如果一个文件没有发生更改,Git 只会保留到前一个相同文件的链接。

使用 Git,你大部分操作都不需要连接服务器。因为你在电脑上拥有整个项目的历史记录,所以操作非常快速。你可以浏览项目历史记录或查看版本之间的变化,而不需要等待服务器。

Git 确保没有任何东西会丢失或损坏。每个文件和目录都经过了校验和,Git 会知道是否发生了任何更改。

Git 使用 SHA-1 哈希,对于文件的每个版本都有一个唯一的代码。如果对内容进行了任何更改,甚至只是一个字符,都会导致不同的 SHA-1 哈希。

在 Git 中,几乎所有的操作都会向项目添加数据,这样做很难意外丢失信息。一旦提交了更改,它们就会被安全地存储。使用 Git 进行实验更加安全。

了解 Git 的三种状态 - 修改、暂存和提交 - 对于有效的版本控制至关重要:

基本的 Git 工作流程:

首次设置Git涉及定制你的Git环境以满足你的偏好。但首先,你需要从Git - Downloads下载Git,或者使用Chocolatey软件包。然后,只需按照安装说明操作,你就可以开始了。

我们使用git config工具来定制我们的Git环境。该工具允许我们检索和设置配置变量,这些变量决定了Git的操作方式。这些变量可以存储在三个不同的位置:

每个配置级别都会覆盖上一个级别的值。例如,.git/config中的值将覆盖~/.gitconfig中的值。

要查看所有配置设置及其来源/原始信息:

在Git中,身份用于正确归属提交。让我们设置你的用户名和电子邮件地址。

如果需要为特定项目覆盖此设置,可以在设置值时省略–global选项,它们将仅适用于该特定存储库。

在配置了你的身份之后,设置Git中的默认文本编辑器非常重要。当Git需要你输入消息时,例如写提交消息或解决合并冲突时,将使用此文本编辑器。

默认情况下,Git使用你系统的默认文本编辑器。但是,如果你更喜欢使用不同的文本编辑器,例如Emacs,你可以这样设置:

在Windows系统中,设置不同的文本编辑器需要指定其可执行文件的完整路径。例如,如果你想使用Notepad++,你可以使用如下命令:

确保提供你文本编辑器的可执行文件的正确路径。

顺便说一下,这些 - “-multiInst -notabbar -nosession -noPlugin” - 是在Git启动Notepad++时用于自定义其行为的选项。

默认情况下,使用git init初始化新存储库时,Git会创建一个名为master的分支。但是从Git版本2.28开始,你可以选择为初始分支设置不同的名称。

将默认分支名称全局更改为‘main’

你可以使用以下命令查看你的Git配置:

git config –list命令会列出Git当前可以找到的所有配置设置。

有三种等效的方法可以获取任何Git命令的详细帮助:

将<verb>替换为你需要帮助的任何命令。例如,要获取config命令的帮助,你可以输入:

这些命令也可以在离线时使用,非常方便。

如果你需要快速、简洁地了解Git命令的可用选项,可以使用-h选项:

要开始使用Git,你通常需要获取一个Git存储库。基本上有两种主要的获取方式:

打开终端或命令提示符。使用cd命令将目录更改为你项目的位置:cd /path/to/your/project。

一旦进入你的项目目录,通过运行以下命令初始化一个Git存储库:

该命令会创建一个名为.git的新子目录,Git在其中存储所有必要的文件,用于你的Git存储库。在这一点上,你的项目文件还没有被跟踪。

现在,假设你有某些文件希望Git开始跟踪:

git add将文件添加到暂存区,表示你希望将它们包含在下一次提交中,然后提交更改。-m标志允许你向提交添加描述性消息。

获取Git存储库的第二种方法是克隆一个现有的存储库。当你想要在已经存在于其他地方的项目上工作时(例如,你想要贡献的项目),这将非常有用。

注意:当你克隆一个存储库时,Git会检索服务器上几乎所有数据的完整副本。这包括项目历史记录中每个文件的每个版本。这意味着你将在本地机器上拥有存储库的完整副本。

要克隆一个存储库,使用git clone命令后跟存储库的URL。例如,要克隆grok-1存储库,你可以使用:

这将创建一个名为grok-1的目录,初始化其中一个.git目录,并拉取该存储库的所有数据。

顺便说一句,.git只是一个约定,表示该URL指向一个Git存储库。你可以使用它,也可以不使用,都无所谓。

如果你想要克隆到具有不同名称的目录中,可以指定它。要将grok-1存储库克隆到名为“chatgpt”而不是“grok-1”的目录中,可以这样做:

Git提供了各种传输协议供你在克隆存储库时使用。上面的示例使用https://协议,但你也可能看到git://或user@server:path/to/repo.git,它们使用SSH传输协议。

现在你已经设置了一个Git存储库,你经常需要对你的存储库进行更改,并记录这些更改。这个过程涉及跟踪文件,暂存更改和提交快照。让我们探讨其中涉及的步骤:

在使用Git存储库时,了解文件的状态非常重要。

Git将文件分为两种类型:已跟踪和未跟踪。已跟踪的文件是Git识别的文件,可能因为它们是上一个快照(提交)的一部分,或者已被暂存。未跟踪的文件是其他所有文件 - Git当前不在监视的文件。要检查存储库的状态:

该命令提供有关当前分支、其同步状态以及你的文件状态的全面信息。

git status还提供了你可以采取的操作建议。例如,当文件被修改但未暂存时,git status建议使用git add <file>将其暂存。它还建议使用git checkout – <file>来丢弃工作目录中的更改。这些建议通过提供快速访问相关Git命令来简化你的工作流程。

此外,git status还提供了一种简短的状态模式(git status -s),使用符号(例如,M(修改)、A(添加)和??(未跟踪))来表示文件的状态。

当你在项目中创建新文件时,Git最初将其视为未跟踪的。要开始跟踪新文件,你需要使用git add命令将其添加到暂存区。

例如,让我们为我们的项目创建一个名为index.html的新文件并将其添加到暂存区:

添加后,再次运行git status将显示index.html文件现在已被跟踪并准备提交。

如果你修改了现有的已跟踪文件,你需要使用git add暂存更改。假设我们修改了一个名为styles.css的现有文件

进行更改后,暂存文件:

现在,当你检查状态时,你将看到已修改的文件和新文件都已准备好提交。

通常,在项目中有一些不希望Git跟踪的文件或目录。这些可能包括日志文件、构建产物或敏感信息,例如本地环境设置(如.env或config.json)。你可以使用.gitignore文件指定要忽略的这些文件。

创建一个.gitignore文件:

列出你想要忽略的文件或目录的模式:

在这里,我们告诉Git忽略所有扩展名为.log的文件和build/目录。

注意:在添加到.gitignore文件之前由Git跟踪的文件将保持跟踪状态。要删除它们,你需要手动使用Git命令取消跟踪。

以下是一些可以用来更有效地使用Git的模式。

如果你想在提交之前查看你对文件所做的确切更改,你可以使用git diff命令。

要查看未暂存的更改:

要查看暂存的更改:

git diff提供了实际修改的详细视图。使用git diff <filename>来聚焦于特定文件内的更改。

当你准备提交你的更改时,使用git commit命令。这将为你打开文本编辑器,让你提供提交消息。或者,你可以使用-m标志直接添加提交消息:

一旦你暂存了你想要包含在提交中的更改,你可以使用git commit提交它们

如果需要从Git的跟踪中删除一个文件,你可以使用git rm。它会将文件从存储库和工作目录中删除。假设你想要删除一个名为temp.txt的文件:

如果你只想从存储库中删除它但保留在工作目录中,可以使用–cached选项:

Git不明确跟踪文件的移动。但是你可以使用git mv来重命名或移动你存储库中的文件。例如,将old_file.txt重命名为new_file.txt:

这个命令将暂存重命名,并将在下一次提交中反映出来。

它等价于手动移动文件,然后使用git rm删除旧文件,然后使用git add添加新文件。git mv基本上将这些步骤合并为一个单独的命令。

这些命令构成了进行更改、暂存和提交到Git存储库的基本工作流程。

在创建多个提交或克隆存储库后,git log命令允许你查看提交历史。

默认情况下,它以逆时间顺序列出提交,显示每个提交的SHA-1校验和、作者的名称和电子邮件、日期和提交消息。现在让我们看看如何增强这个输出:

要查看每个提交引入的差异,你可以使用-p或–patch选项:

–stat选项为每个提交提供了汇总统计信息,包括修改的文件、添加/删除的行数和摘要。

–pretty选项允许你改变日志输出格式。针对不同格式,提供了各种选项:

–pretty=format的有用格式说明符:

ASCII图形:

使用–graph,你还可以可视化分支和合并历史。

除了格式化选项之外,git log还提供了各种限制选项,以精细调整显示的提交历史。

示例用法:查看自某个日期以来作者Abbey的最后3次提交,带有补丁详情:

在Git中撤销更改是一个常见的需求,有几种选项可用于此目的。

如果你提交得太早或需要对最后一次提交进行额外的更改,可以使用以下命令:

这将打开提交消息编辑器,允许你修改消息。如果自上次提交以来没有进行任何更改,则仅允许你编辑提交消息。

注意:只有在提交仍然是本地的并且尚未推送到远程时才能修改提交,以避免给协作者带来问题。

要取消意外包含的文件的暂存状态,可以使用git reset HEAD <file>命令。例如:

文件将取消暂存,使你可以在不提交意外更改的情况下进行进一步的更改。

假设你对文件进行了一些修改,后来意识到你不想保留这些修改。使用git checkout – <file>来丢弃对文件的更改,并将其恢复到以前的状态。

这将用最后暂存或提交的版本替换修改后的文件。

让我们探索由Git版本2.23.0引入的替代方法,即git restore,它是许多撤消操作的替代方法。

如果你意外地暂存了不打算提交的文件,可以使用git restore –staged <file>来取消暂存。

文件将取消暂存,类似于git reset HEAD <file>,这样你就可以在不提交意外更改的情况下进行进一步的更改。

要丢弃工作目录中对文件所做的更改,请使用git restore <file>:

类似于git checkout – <file>,此命令丢弃对指定文件所做的更改,将其恢复到上次提交的状态。

重要提示:使用git reset、git checkout –、git restore等命令时要小心,因为它们可能会永久丢弃本地更改。只有当你确定不需要更改且没有未保存的本地更改时,才使用这些命令。

替代方法:存档和分支是将更改暂时设置为一边而不完全丢弃它们的替代方法。如果对丢弃更改不确定,这些方法更安全。

远程仓库是你的项目在互联网或网络上托管的版本。与他人合作涉及管理这些远程仓库,包括添加、删除和检查它们。让我们学习如何有效地管理它们。

首先,让我们查看我们的项目配置了哪些远程服务器:

这个命令列出了我们指定的所有远程句柄的简称。例如,如果我们克隆了一个仓库,通常会看到origin,这是Git为我们从中克隆的服务器分配的默认名称。

添加 -v 选项会提供额外的细节,比如与每个远程关联的URL。

这将显示每个远程的获取和推送URL,让我们了解项目托管在哪里以及我们如何与之交互。


讯享网

要显式添加一个新的远程仓库,使用 git remote add <shortname> <url>:

在这里,我们添加了一个名为example的远程,使用了指定的URL。这允许我们在命令中使用example作为这个远程仓库的引用名称。

要从远程仓库获取数据,我们使用git fetch命令后跟远程名称:

它会将来自origin远程仓库的任何新更改下载到我们的本地仓库,使我们能够与最新的开发保持同步。

另外,如果我们想在单个步骤中从远程分支中获取并合并更改到我们当前的分支,我们可以使用git pull命令:

在这里,我们明确地从origin远程仓库的master分支拉取更改到我们当前的分支中。

要与他人分享我们的工作,我们使用以下命令将更改推送到远程仓库:

在这个例子中,我们将我们的本地更改推送到origin远程仓库的主分支。

最后,我们可以检查一个远程仓库以收集关于它的更多信息:

这个命令显示了详细信息,如获取和推送的URL、被跟踪的分支以及与origin远程仓库关联的本地分支配置。

假设我们想要将远程的简称从example重命名为new-example:

如果由于某种原因我们不再需要一个远程仓库,并且想要将其从我们的项目中删除:

删除后,远程跟踪分支和关联的配置设置也将被删除。

在Git中,标签是一项基本功能,允许开发人员将存储库历史中的特定点标记为重要的。通常,标签用于表示发布点,例如v1.0、v2.0等。

假设你正在处理一个具有多个发布版本的项目。要列出现有的标签:

此外,你可以使用 -l 或 –list 选项搜索匹配特定模式的标签。例如:

这个命令将列出像v2.0、v2.0-beta等符合指定模式的标签。

Git支持两种类型的标签:轻量标签和注释标签。

当你想要标记一个特定的提交而不添加任何额外信息时,请使用轻量标签。例如:

要查看与此标签关联的提交信息,请使用:

轻量标签仅显示提交校验和。

另一方面,注释标签包含额外的信息,如标记者信息、日期和标记消息。

创建注释标签涉及使用带有git tag命令的 -a 选项,以及一个标记消息。例如:

要查看有关此标签的详细信息,包括它指向的提交和标记消息,请使用:

有时,你可能会忘记给特定的提交打标签。不用担心,你可以稍后指定提交校验和来打标签。

例如:假设你忘记给ID为abcdefg的提交打标签。你可以这样给它打标签:

此命令将指定的提交标记为v1.2。

要将特定标签推送到远程服务器,你可以使用:

如果你有多个标签并想一次推送它们所有,你可以使用 –tags 选项:

要在本地删除标签(从本地仓库中删除):

例如,要删除名为v1.4-lw的轻量标签:

另外,你可以以两种方式从远程服务器中删除标签:

这个命令将什么也不推送(:)到远程标签v1.1-lw,从而有效地删除它。

这个命令直接从远程服务器中删除标签v1.1-lw。

要查看特定标签处文件的状态,你可以检出那个标签:

这个命令将你的仓库置于“分离的 HEAD”状态,在这个状态下你可以查看文件但不能直接进行更改。

如果你需要在该标签处工作文件,最好创建一个新的分支:

现在你可以进行更改和提交,而不会改变原始标签。

Git别名是你可以创建的简化和简化Git工作流程的快捷方式或自定义命令。

要创建Git别名,你使用git config命令并使用–global标志使别名在所有Git仓库中可用。

你可以为经常使用的Git命令创建别名,以使它们更容易记忆和输入。例如:

现在,你可以使用更短的别名git co、git br和git ci分别代替完整的命令。

你还可以为你经常执行的操作或改进命令可读性创建自定义别名。例如:

现在,你可以使用git unstage <file>代替git reset HEAD – <file>来取消暂存一个文件。

别名也可以用于将多个Git命令组合成一个单独的别名。例如,让我们创建一个别名来暂存所有更改,然后使用一个命令提交它们:

现在,运行git commitall将暂存所有更改(git add -A)然后提交它们,节省了时间和击键。

Git 中的分支为管理项目的代码库提供了一种强大的方式,允许进行并行开发和实验,而不影响主要代码库。

Git 分支允许你偏离主要的开发线,独立地开发功能或修复问题,然后将你的更改合并回来。与许多其他版本控制系统不同,Git 的分支模型轻量且高效,使分支操作几乎是瞬间完成的。

分支是指向提交的轻量级、可移动的指针。默认分支名通常是 “master”,但它并不特殊 - 它就像任何其他分支一样。

创建和切换分支允许你同时处理不同的功能。

当你想要开始开发一个新功能或尝试一个想法时,你可以在 Git 中创建一个新分支。这个新分支作为一个独立的开发线,允许你进行更改而不影响主分支。

这个命令创建了一个名为 ‘new-feature’ 的新分支,指向与当前分支相同的提交。分支可以共存,并且 Git 保持一个特殊的指针称为 HEAD,指示当前的分支。

首先,让我们了解 Git 中的分支基础知识。当你初始化一个 Git 仓库时,你会从一个默认的分支开始,通常命名为 ‘master’ 或 ‘main’。分支本质上是指向提交的指针,使你能够独立地处理不同的功能或修复。

要查看仓库中的所有分支,使用命令:

这将显示一个分支列表,带有一个星号 () 表示当前检出的分支。要获取关于每个分支的最后一次提交等额外信息,可以使用:

要切换到一个现有的不同分支,使用 git checkout。

这个命令将 ‘HEAD’ 指针切换到 ‘new-feature’ 分支,使其成为当前活动分支。

要在一次操作中创建并切换到一个新分支:

在 Git 2.23 版本之后,你可以使用 git switch 而不是 git checkout。

创建并切换分支后,你可以使用以下命令可视化分支结构:

这个命令会显示提交历史和分支指针的简洁且图形化的表示,让你看到分支随着时间的推移是如何分叉和合并的。

随着项目的发展,一旦分支的更改确定完成,你将把它们合并回主分支。要识别已合并的分支,执行:

这个命令列出了已成功合并到当前分支的分支。这些分支通常可以安全删除,使用:

但是,对于包含未合并工作的分支,使用:

删除这样的分支需要 ‘-D’ 标志:

这确保你不会意外丢失任何未合并的更改。

要重命名一个本地分支:

这个命令会在本地更新分支名称。为了在远程仓库中反映这个改变,推送重命名后的分支:

使用以下命令验证更改:

确保在远程删除旧分支:

这确保了本地和远程仓库之间的一致性。

重命名默认分支,通常是 ‘master’,需要谨慎和协调,因为它会影响项目集成和合作者。

重命名后,将更新后的分支推送到远程仓库:

确保记得更新依赖项、测试、脚本和仓库主机等所有引用和配置。完成后,删除远程上的旧 master 分支:

这与我们在配置部分中讨论的 $ git config –global init.defaultBranch main 不同,有以下几点不同:

附加资源:考虑查看官方 Git 资源,了解其信息丰富的可视化和图表,这些图表可以为你提供更多关于远程分支和分支管理概念的清晰度。

让我们更详细地了解分支,并看一下在大型项目中常用的分支工作流程。

在 Git 中,长期运行的分支是指在较长时间内保持开放状态的分支。

专题/功能分支是为特定功能或工作片段创建的短期分支。与长期运行的分支不同,专题分支在使用完毕后通常会被删除。

例如:假设一个团队维护两个长期运行的分支:master 和 develop。

开发人员将特性分支中的更改合并到 develop 分支进行测试。一旦特性经过彻底测试且稳定,它们就会合并到 master 分支中。

注意到变更如何在不同稳定性级别之间进展,从最不稳定的(专题分支)到更稳定的(例如 develop 分支),因为它们经过测试和完善,最终合并到最稳定的主分支。

这样保持了稳定代码和开发代码之间的清晰分隔,确保只有经过彻底测试的功能才能进入稳定发布。

在 Git 中,当你使用分支时,有两种主要的方法可以将一个分支的更改集成到另一个分支中:合并和变基。

与合并不同,合并可能会产生一个混乱的历史,带有多个合并提交,而变基产生一个线性的历史,使得更容易理解随时间进行的更改顺序。

假设你正在一个项目中使用两个分支:“feature” 和 “master”。你在 “feature” 分支上进行了一些提交,现在想要使用变基将这些更改集成到 “master” 分支中。

首先,切换到你的 “feature” 分支:

然后,将你的 feature 分支变基到 master 分支上:

这个命令将你在 “feature” 分支上所做的所有提交/更改,应用到 “master” 分支上的最新提交之上,并逐个重放提交。

不仅可以变基到 master 分支,你也可以将一个专题分支变基到另一个专题分支上。例如:

假设你正在一个项目中使用两个功能分支:“frontend” 和 “backend”。你在 “frontend” 分支上做了一些提交,现在想要将这些更改集成到 “backend” 分支中。

这次让我们采用一个不同的方法 - 使用 git rebase 的 –onto 选项将 “frontend” 分支变基到 “backend” 分支上:

完成变基后,切换回 “backend” 分支并执行快进合并:

现在,你的项目历史呈线性,反映了从 “frontend” 分支到 “backend” 分支中的更改顺序集成。

本手册作为一个全面指南,帮助理解和利用 Git,这是一个广泛用于软件开发的强大版本控制系统。

从基本工作流程到设置仓库、打标签和分支远程仓库,我们已经学习了一套全面的功能,将有助于简化开发过程。

(本文内容参考:java567.com)

小讯
上一篇 2025-06-13 15:49
下一篇 2025-06-03 18:12

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/200208.html