介绍
Git 是世界上最流行的去中心化版本控制系统。如果你想编写代码并参与协作软件开发项目,那么充分了解 Git 是必不可少的。
Git是如何工作的?在本文中,你将了解 Git 的工作原理以及如何使用其关键功能。
先决条件
- Git的安装和配置(见如何在Windows上安装的Git,在Mac上安装的Git,在Ubuntu上安装的Git,在CentOS 7安装的Git,或在CentOS 8安装的Git)
Git工作原理介绍:Git 是如何工作的?
Git允许用户使用简单的命令跟踪代码更改并管理他们的项目。
Git 的核心是用于包含项目的存储库。存储库可以存储在本地或网站上,例如 GitHub。Git 允许用户存储多个不同的存储库并独立跟踪每个存储库。
Git原理示例解释:在整个开发过程中,该项目有几个保存点,称为commits。提交历史包含所有提交,即开发期间在项目中实施的更改。提交允许你将代码回滚或快进到提交历史记录中的任何提交。
Git 使用SHA-1 哈希值来引用提交。每个唯一的哈希指向存储库中的特定提交。使用哈希,Git 创建了一个树状结构来轻松存储和检索数据。
每个 Git 项目中的文件都会经历几个阶段:
- 工作目录。修改过的文件,但未跟踪且尚未准备好提交。
- 暂存目录。将修改后的文件添加到暂存环境意味着它们已准备好提交。
- 提交。提交历史记录中保存的暂存区文件的快照。
Git工作过程解析:下图显示了基本的 Git 工作流程:
以下部分详细解释了 Git 功能。
暂存
Git是如何工作的?当你希望 Git 跟踪你对某个文件所做的更改时,你必须将其添加到暂存区。Git 会识别你何时修改文件,但不会跟踪它,除非你暂存它。暂存区代表一个安全层,允许你在提交更改之前查看更改。
处于暂存区是稍后提交文件的先决条件,即在主分支上实现。你可以通过运行以下命令来检查 Git 跟踪哪些文件:
git status
要将文件添加到暂存区,请使用以下语法:
git add [filename]
用[filename]
文件的实际名称替换语法。
例如:
注意:你可以通过运行该git add .
命令使暂存更快并暂存工作目录中的所有文件。
如果你改变主意,可以从暂存区中删除文件。要取消暂存文件,请使用以下语法:
git rm --cached [filename]
例如:
提交
Git工作原理介绍:提交代表你工作的保存点,即特定时间点代码的快照。将文件添加到暂存区意味着它们已准备好提交。
要检查是否有任何文件可以提交,请运行:
git status
例如:
在这里我们看到三个文件已准备好提交。要提交它们,请使用以下语法:
git commit -m "Notes about the commit"
每个提交都应该在-m
标志后指定一个描述,这将有助于你稍后了解提交的内容。
例如:
输出包含提交并说明更改的内容。
你可以通过运行来检查你的提交历史:
git log
输出显示你所做的所有提交的日志,提交的人,日期和提交注释。添加该--oneline
标志会显示在一行中浓缩的提交历史记录。省略标志会显示详细的提交历史记录。
还原revert
Git原理示例解释:如果你在项目开发过程中犯了错误或出于任何原因想要恢复提交,请git revert
允许你这样做。
该git revert
命令还原特定提交,即撤消你为从主分支中删除更改所做的提交。
注意:该git revert
命令不会从提交历史记录中删除提交。它只添加一个新的提交,指定它已经恢复了指定的提交。
语法是:
git revert [commit_ID]
通过运行查找提交 ID git log
。7 个字符的代码是提交 ID。
以下示例演示了该git revert
命令:
该git reset
命令将你永久带回到开发中的某个点。如果你想重新添加,在该时间点之后添加的所有文件和更改都将取消暂存。
警告:git reset
仅当你完全确定要撤消/删除部分代码时才使用,因为此操作是不可逆的。
语法是:
git reset [commit_ID]
指定--hard
标志会删除未暂存的文件,使其无法恢复。
fork分叉
Git是如何工作的?fork 是现有存储库的完整副本,允许你在不影响原始项目的情况下进行更改和试验。分叉是某人对现有项目提出更改建议的一种方式,如果代码是开源的,它也可以作为你自己项目的起点。
如果你想为项目提出更改或错误修复建议,你可以分叉存储库,进行修复,并向项目所有者提出拉取请求。
下图说明了分叉的工作原理:
Git工作原理介绍:要分叉存储库,请按照以下步骤操作:
1. 登录你的GitHub 帐户。
2. 访问 GitHub 上的存储库页面,然后单击Fork选项。
3. 等待分叉过程完成。完成后,你将在 GitHub 帐户上拥有该存储库的副本。
4. 下一步是从代码部分获取存储库 URL并将存储库克隆到你的本地计算机。
5. 使用以下语法克隆存储库:
git clone [repository URL]
输入 URL 代替[repository URL]
语法。
例如:
在这个例子中,我们创建了springmvc-raml-plugin存储库的一个分支,现在我们可以自由地实现我们的更改或开始在现有插件之上构建一个新插件。
分支
Git工作过程解析:分支是 Git 中的一项功能,它允许开发人员处理原始代码的副本以修复错误或开发新功能。通过在分支上工作,开发人员在想要实现更改之前不会影响主分支。
master 分支通常代表已发布或已发布的代码的稳定版本。这就是为什么你应该避免在不稳定的情况下向 master 分支添加新功能和新代码。
分支创建了一个隔离的环境来尝试新功能,如果你喜欢它们,你可以将它们合并到主分支中。如果出现问题,你可以删除该分支,而 master 分支保持不变。
分支有助于协作编程,并允许每个人同时处理他们的代码部分。
下图是 Git 中分支的直观表示:
注意: 完成更改后应删除分支,因为它们应该是临时的。离开分支会创建一个凌乱的存储库。
在 Git 中创建新分支的语法是:
git branch [branch-name]
为你的分支输入一个名称来代替[branch-name]
语法。例如:
在这个例子中,我们创建了一个名为feature-1的新分支。
合并与冲突
Git工作原理介绍:该git merge
命令允许开发人员在单独的分支上处理新功能或错误修复,以便在完成后将其更改与主分支合并。合并更改意味着将它们实现到主分支中。
开发人员可以输入他们的更改,git merge
而无需将他们的工作发送给参与项目的每个人。
要查看现有分支,请运行:
git branch -a
在本教程中,我们创建了一个名为feature-1的单独分支。要将feature-1分支与master分支合并,请按照以下步骤操作:
1.切换到master分支。该git merge
命令要求你位于合并接收分支上。运行以下命令切换到 master 分支:
git checkout master
2. 切换到 master 分支后,使用以下语法合并你的更改:
git merge [branch-name]
输入分支的名称代替[branch-name]
语法。
例如:
Git 会自动将你的更改输入到 master 分支,任何参与该项目的人都可以看到。
但是,有时你可能会遇到合并 冲突。
Git工作过程解析 - 例如,当你在另一个分支上工作时,如果有人决定在 master 分支上进行编辑,则会发生冲突。发生这种类型的冲突是因为你想将你的更改与 master 分支合并,该分支现在与你的代码副本不同。
我们的详细指南提供了几种不同的方法来解决 Git 中的合并冲突。
获取/拉动更改
Git原理示例解释:git fetch
和git pull
命令都用于检索来自远程存储库的变化。
不同之处在于git fetch
仅从远程存储库检索元数据,但不会将任何内容传输到本地存储库。它只会让你知道自上次拉取后是否有任何可用更改。
在以下示例中,git fetch
通知我们远程存储库中有一些更改,但本地存储库中没有任何更改:
另一方面,git pull
还要检查远程存储库中的任何新更改并将这些更改带到你的本地存储库。
所以,git pull
用一个命令做两件事 - agit fetch
和 a git merge
。该命令下载对当前分支所做的更改并更新本地存储库中的代码。
例如:
在这个输出中,我们看到它是一种快进合并类型,并且 Git 将一个文件拉到本地存储库 - README.md。
推送更改
Git是如何工作的?该git push
命令与 执行相反的操作git pull
,允许你共享更改并将其发布到远程存储库中。
当你在本地进行更改并希望将它们推送到远程存储库时,请运行:
git push
例如:
如果你在本地创建了一个远程不存在的新分支,则该命令在尝试推送更改时会返回错误:
Git 在输出中提供了解决方案。运行输出中指定的命令将分支推送到上游:
变基
Git工作原理介绍:当你创建分支时,Git 会创建现有代码的副本供你进一步开发。有时你可能需要从 master 分支合并新更改 以跟上一般开发。
变基涉及将新更改从主分支实施到你的功能分支。这意味着 Git 会重放来自主分支的新更改,在功能分支的顶端创建提交。
Git原理示例解释 - 按照以下步骤重新设置你的功能分支:
1. 使用 移动到功能分支git checkout
。语法是:
git checkout [branch-name]
2. 运行以下命令来重新设置分支:
git rebase master
Git工作过程解析 - 下图显示了 rebase 函数的工作原理:
结论
Git是如何工作的?你现在应该很好地掌握了 Git 是什么以及它是如何工作的。随意创建一个存储库并测试各种功能以适应使用它们。
你还可以下载我们的Git 命令备忘单 PDF,将所有命令集中在一处。