Git 分支基础操作

GitBeginner
立即练习

介绍

欢迎回来,时空旅行者!现在,我们将通过 Git 分支(branch)将你的时空旅行技能提升到一个全新的高度!

想象一下,如果你能为你的项目创建「平行宇宙」,在那里你可以尽情尝试各种疯狂的想法,而不会弄乱你的主时间线。这正是 Git 分支能为你做的事情!它们就像代码的平行维度,你可以在其中开发新功能、修复漏洞或进行大胆的实验,而无需担心风险。

在本次实验结束时,你将成为多重宇宙的主宰,能够创建新的现实(分支)、在它们之间跳跃(切换)、将它们合并(合并),甚至删除不再需要的宇宙。无论你是独自工作,还是作为跨维度编码团队的一员,这些超能力对于任何时空旅行开发者来说都是必不可少的。

准备好成为 Git 分支大师了吗?让我们开始吧!

建立你的多重宇宙枢纽

首先,我们需要为所有平行现实创建一个中心枢纽。这将是我们的主 Git 仓库。

  1. 打开你的终端。这是你跳跃维度的控制面板。

  2. 进入你的项目空间:

cd ~/project

此命令将当前目录更改为家目录中的「project」文件夹。如果你不确定自己所在的位置,可以使用 pwd 命令打印当前工作目录。如果你在终端中迷路了,这是一个非常有用的技巧。

  1. 让我们为多重宇宙实验创建一个新文件夹:
mkdir git-branch-lab
cd git-branch-lab

mkdir 命令创建一个新目录,然后我们使用 cd 进入该目录。这给了我们一个干净的起点。把这个新文件夹想象成我们时空旅行操作的控制室。

  1. 现在,初始化我们的枢纽(Git 仓库):
git init

此命令在当前目录中创建一个新的 Git 仓库。它会设置 Git 开始跟踪项目所需的所有必要文件。这些文件隐藏在一个名为 .git 的文件夹中。

你应该会看到类似以下的消息:

Initialized empty Git repository in /home/labex/project/git-branch-lab/.git/

恭喜!你刚刚为无限的可能性创建了一个枢纽!这是你所有时空旅行冒险的基石。

  1. 让我们给未来的自己写一张便条,解释这里是什么地方:
echo "## Git Branch Lab" > README.md
echo "This is my hub for multiversal Git branch experiments" >> README.md

以下是这些命令的作用:

  • 第一条命令创建一个名为 README.md 的新文件,并将「## Git Branch Lab」写入其中。在 Markdown 中,「#」符号表示标题。这个文件将作为我们多重宇宙枢纽的用户手册。
  • 第二条命令在 README.md 中追加另一行内容。「>>」表示「添加到文件末尾」。我们正在为用户手册添加一些细节。

如果你对刚刚创建的内容感到好奇,可以使用 cat README.md 命令查看文件内容。这个命令就像是在阅读多重宇宙枢纽的使用说明。

  1. 现在,在这个新宇宙中建立我们的第一个保存点(提交):
git add README.md
git commit -m "Initial commit: Create the multiverse hub"

让我们分解一下:

  • git add README.md 告诉 Git 开始跟踪 README.md 的更改。这会将文件放入暂存区(staging area)。把暂存想象成在为旅行做准备。
  • git commit 使用暂存的更改创建一个新的提交(保存点)。这就像是为我们当前的宇宙拍了一张快照。
  • -m 标志允许你直接提供提交信息。务必尝试编写清晰、具有描述性的提交信息!这条信息就像是一张便条,解释了我们在这次快照中更改了什么。

如果你不确定哪些内容已暂存或已提交,可以使用 git status 进行检查。这就像是在检查时空旅行设备的状态。

创建你的第一个平行现实

现在我们已经建立了主宇宙(master 分支),让我们创建第一个平行现实!

  1. 创建一个名为 feature-dimension 的新分支:
git branch feature-dimension

此命令创建了一个新分支,但尚未切换到该分支。把它想象成创建了一个新的平行宇宙,但你仍然留在原始宇宙中。这就像拥有了一个新现实的蓝图,但你还没有踏入其中。

你刚刚创建了一条新的时间线,但你还没进去。让我们看看我们拥有的所有时间线:

git branch

你应该会看到:

  feature-dimension
* master

* 符号显示了你当前所在的现实。目前,你仍然在主宇宙(master)中。master 分支是 Git 在初始化新仓库时创建的默认分支。

提示:按 q 键退出分支列表并返回终端。

  1. 让我们跳入新的现实:
git checkout feature-dimension

此命令执行了两项操作:

  1. 它将你的当前工作目录切换到 feature-dimension 分支。
  2. 它会更新工作目录中的文件,以匹配 feature-dimension 分支的状态。这就像穿过传送门进入了新的现实。

现在如果你再次运行 git branch,你会看到:

* feature-dimension
  master

* 已经移动,表明你已成功跳跃到新的维度!你现在正在这个平行现实中工作。

或者,你也可以使用 git switch feature-dimension 来达到同样的效果。git switch 是 Git 2.23 中引入的一个较新命令,专门用于分支切换,使其更加清晰直观。两个命令都能达到相同的结果,但 git switch 因其语义明确而通常更受推荐。

如果你还没看到文件有任何变化,请不要担心。当你创建一个新分支时,它最初是你所在分支的精确副本。令人兴奋的部分在于我们开始进行更改时!这些初始副本确保了每个现实都从相同的基础开始。

专业提示:在较新版本的 Git 中,你可以通过一个命令创建并跳入新分支:git checkout -b feature-dimensiongit switch -c feature-dimension。这就像是在一个敏捷的动作中同时创建并踏入传送门!在 git checkout 中使用 -b 或在 git switch 中使用 -c 将分支创建和切换合并为一个步骤。

如果你迷路了,记不起自己在哪个维度(分支),只需再次运行 git branch。带有 * 的分支就是你当前的位置。这就像在多重宇宙地图上查看你的位置。

塑造你的新现实

既然我们已经身处新维度,让我们进行一些仅存在于此处的更改。记住,除非我们决定合并它们,否则我们在这里所做的一切都不会影响主宇宙。这让我们可以安全地进行实验,而不会干扰主时间线。

  1. 让我们在这个现实中创造一件新神器:
echo "This is a powerful artifact from another dimension" > dimensional-artifact.txt

此命令创建一个名为 dimensional-artifact.txt 的新文件并写入一条消息。> 符号用于创建新文件(或覆盖现有文件)并填入给定内容。这件神器是我们当前现实所特有的。

  1. 现在,让我们在时间线中保存这件神器:
git add dimensional-artifact.txt
git commit -m "Create a powerful interdimensional artifact"

这些命令在步骤 1 中应该已经很熟悉了。我们告诉 Git 跟踪新文件,然后创建一个带有描述性信息的保存点。这些命令就像是为新发现的神器拍了一张快照。

  1. 让我们也更新一下给未来自己的便条,记录这个新现实:
echo "##### Feature Dimension" >> README.md
echo "We've discovered a powerful artifact in this reality" >> README.md

这些命令正在向我们的 README.md 文件添加新行。>> 符号会将内容追加到现有文件末尾,而不是覆盖它。我们正在更新用户手册,以反映我们在新维度中的发现。

  1. 让我们也保存这些更改:
git add README.md
git commit -m "Document the discovery of the artifact"

同样,我们正在创建另一个保存点,这次是针对更新后的 README.md 文件。我们正在为未来的自己保存更新后的文档。

干得好!你现在已经在平行现实中做出了更改。目前,这些更改仅存在于 feature-dimension 分支中。如果你切换回 master 分支,你将不会在那里看到这些更改。这种隔离确保了我们在一个现实中的实验不会影响其他现实。

要查看当前分支与主分支之间的差异,可以使用命令 git diff master。这将向你展示当前现实与主时间线相比所做的所有更改。这就像是在对比两个宇宙的状态。

合并现实

既然我们在平行现实中取得了惊人的发现,是时候把它们带回主宇宙了。这个过程被称为合并(merging)。

  1. 首先,让我们跳回主现实:
git checkout master

或者

git switch master

两个命令都会将我们切回 master 分支。

  • git checkout 是用于切换分支的旧命令。它从 Git 早期就存在,并且仍然受支持。
  • git switch 是 Git 2.23 中引入的新命令。它旨在更加直观且易于理解。

你可以使用其中任何一个命令来切换分支,但 git switch 通常因其清晰性而更受青睐。

如果你现在查看文件,你会发现你的跨维度神器消失了!别担心,它在另一个维度里很安全。这证明了一个分支中的更改在合并之前与其他分支是隔离的。

  1. 现在,让我们将平行现实合并到主时间线中:
git merge feature-dimension

此命令告诉 Git 获取来自 feature-dimension 的所有更改并将其应用到 master。这就像是将平行现实中的发现整合到我们的主宇宙中。

你应该会看到类似以下的消息:

Updating <hash1>..<hash2>
Fast-forward
 README.md              | 2 ++
 dimensional-artifact.txt | 1 +
 2 files changed, 3 insertions(+)
 create mode 100644 dimensional-artifact.txt

此输出会告诉你哪些文件发生了更改,以及添加或删除了多少行。「Fast-forward」(快进)意味着 Git 能够简单地将 master 分支指针向前移动到 feature-dimension 所在的位置,因为没有冲突的更改。快进合并是最简单的合并类型,当你要合并入的分支自你创建新分支以来没有发生过变化时,就会发生这种情况。

恭喜!你刚刚合并了两个现实!我们在 feature-dimension 中所做的更改现在已成为主宇宙的一部分。我们的跨维度神器和更新后的文档现在都出现在 master 分支中了。

  1. 让我们确认神器是否通过合并成功传达:
cat dimensional-artifact.txt
cat README.md

这些命令将显示文件的内容。你应该能看到我们在 feature-dimension 中所做的更改。这些命令验证了合并是否成功。

你已成功将平行现实中的发现带入了主时间线。这就是开发者将新功能引入主项目的方式!这是 Git 的核心概念,允许开发者隔离地开发功能,并在准备就绪时将其整合到主代码库中。

如果你想查看已合并到当前分支的所有分支列表,可以使用命令 git branch --merged。这对于跟踪哪些分支已被整合非常有用。

关闭维度传送门

既然我们已经成功将发现带回了主现实,我们就可以关闭通往平行维度的传送门了。在 Git 术语中,我们将删除不再需要的分支。

  1. 让我们关闭 feature-dimension 传送门:
git branch -d feature-dimension

-d 标志告诉 Git 删除该分支,但前提是它已被完全合并。这是一种防止意外丢失未合并更改的安全措施。只有当分支中的更改已合并到你当前所在的分支时,Git 才允许你使用 -d 删除它。

如果你尝试删除一个尚未完全合并的分支,Git 会发出警告。在这种情况下,如果你确定要删除该分支,可以使用 -D 标志代替:git branch -D feature-dimension。这将强制删除分支,无论其合并状态如何。请谨慎使用这种力量!只有当你绝对确定不需要该分支中的更改时,才应使用此命令。

  1. 让我们检查一下还存在哪些现实:
git branch

现在你应该只能看到 master 分支。这表明通往 feature-dimension 的传送门现已关闭。

清理旧分支可以保持多重宇宙的整洁。养成关闭不再需要的维度传送门的习惯是个好做法,尤其是在处理具有许多平行现实的大型项目时。这能保持工作区整洁并防止混淆。

如果你想查看所有分支,包括远程分支,可以使用 git branch -a。在与多个贡献者合作的项目中,这会很有帮助。远程分支是其他仓库中分支的副本。

总结

恭喜你,多重宇宙的大师!你刚刚完成了 Git 分支巫术的速成课程。让我们回顾一下你完成的惊人壮举:

  1. 你为无限的可能性创建了一个枢纽(一个新的 Git 仓库)。
  2. 你开启了一个通往平行现实的传送门(创建了一个新分支)。
  3. 你学会了在不同维度之间跳跃(使用 git checkoutgit switch 切换分支)。
  4. 你在平行宇宙中取得了突破性的发现(在独立分支中提交更改)。
  5. 你合并了两个现实,将你的发现带入了主时间线(合并分支)。
  6. 最后,你学会了如何关闭不再需要的维度传送门(删除分支)。

这些多重宇宙技能对于任何时空旅行开发者来说都至关重要。通过使用分支,你可以:

  • 在平行宇宙中并行开发不同的功能或修复漏洞,而不会干扰主时间线。
  • 在安全的平行现实中尝试疯狂的想法。
  • 与其他跨维度开发者协作,每个人都在自己的现实中工作。
  • 保持主时间线稳定且无故障,仅在准备就绪时才合并新功能。

祝你在维度跳跃中玩得开心,愿你的合并永远没有冲突!