Git 分支指南

在本篇关于 Git 入门的第三篇文章中,学习如何添加和删除 Git 分支。
656 位读者喜欢这篇文章。
Yellow arrows going both ways with texture

Jen Wike Huger 拍摄

在本系列的前两篇文章中,我们开始使用 Git 并学习了如何克隆、修改、添加和删除 Git 文件。在第三部分中,我们将探讨 Git 分支以及为什么和如何使用它。

tree branches

将这棵树想象成一个 Git 仓库。它有很多分支,有长的也有短的,从主干和其它分支上衍生出来。假设树的主干代表我们仓库的 master 分支。在本文中,我将使用 master 作为 “master 分支” 的别名——即仓库的中心或第一个分支。为了简化,我们假设 master 是树干,而其他分支从它开始。

为什么我们需要 Git 仓库中的分支

拥有分支的主要原因是

  • 如果您正在为您的项目创建一个新功能,那么添加它很可能会破坏您正在工作的代码。这对您项目的活跃用户来说将是非常糟糕的。最好从原型开始,您可以在不同的分支中大致设计原型并查看其工作方式,然后再决定是否将该功能添加到仓库的 master 中供其他人使用。
  • 另一个,可能更重要的原因是 Git 是为协作而生的。如果每个人都开始在您仓库的 master 分支之上进行编程,那将会造成很多混乱。每个人都有不同的知识和经验(在编程语言和/或项目方面);有些人可能会编写有缺陷/有 bug 的代码,或者仅仅是您可能不希望在项目中出现的代码/功能。使用分支允许您验证贡献并选择要添加到项目中的内容。(这假设您是仓库的唯一所有者,并且希望完全控制添加到其中的代码。在实际项目中,有多个所有者有权在仓库中合并代码。)

添加分支

让我们回到本系列的前一篇文章,看看我们 Demo 目录中的分支是什么样的。如果您还没有这样做,请按照该文章中的说明从 GitHub 克隆仓库并导航到 Demo。运行以下命令

pwd
git branch
ls -la

pwd 命令(代表当前工作目录)报告您所在的目录(以便您可以检查您是否在 Demo 中),git branch 列出您计算机上 Demo 仓库中的所有分支,而 ls -la 列出 PWD 中的所有文件。现在您的终端将如下所示

Terminal output

master 分支上只有一个文件,README.md。(请忽略列出的其他目录和文件。)

接下来,运行以下命令

git status
git checkout -b myBranch
git status

第一个命令 git status 报告您当前位于 master 分支上,并且(正如您在下面的终端屏幕截图中所见)它与 origin/master 同步,这意味着您在 master 分支本地副本上的所有文件也存在于 GitHub 上。两个副本之间没有差异。两个副本上的所有提交也都是相同的。

下一个命令 git checkout -b myBranch-b 告诉 Git 创建一个新分支并将其命名为 myBranch,而 checkout 将我们切换到新创建的分支。输入第三行 git status,以验证您是否位于您刚刚创建的新分支上。

正如您在下面看到的,git status 报告您位于 myBranch 分支上,并且没有任何内容需要提交。这是因为既没有新文件,也没有对现有文件的任何修改。

Terminal output

如果您想查看分支的可视化表示,请运行命令 gitk。如果计算机提示 bash: gitk: command not found…,则安装 gitk。(有关安装说明,请参阅您的操作系统文档。)

下图报告了我们在 Demo 中所做的事情:您的最后一次提交是 Delete file.txt,并且在此之前有三次提交。当前提交用黄点表示,之前的提交用蓝点表示,黄点和 Delete file.txt 之间的三个框告诉您每个分支的位置(即,每个分支上的最后一次提交是什么)。由于您刚刚创建了 myBranch,它与 mastermaster 的远程副本 remotes/origin/master 位于相同的提交上。(非常感谢 Red Hat 的 Peter Savage,他让我了解了 gitk。)

Gitk output

现在让我们在我们的 myBranch 分支上创建一个新文件,并观察终端输出。运行以下命令

echo "Creating a newFile on myBranch" > newFile
cat newFile
git status

第一个命令 echo 创建一个名为 newFile 的文件,而 cat newFile 显示其中写入的内容。git status 告诉您我们 myBranch 分支的当前状态。在下面的终端屏幕截图中,Git 报告在 myBranch 上有一个名为 newFile 的文件,并且 newFile 当前处于 untracked 状态。这意味着 Git 尚未被告知跟踪对 newFile 所做的任何更改。

Terminal output

下一步是将 newFile 添加、提交和推送到 myBranch(有关更多详细信息,请返回本系列的上一篇文章)。

git add newFile
git commit -m "Adding newFile to myBranch"
git push origin myBranch

在这些命令中,push 命令中的分支是 myBranch 而不是 master。Git 正在获取 newFile,将其推送到您在 GitHub 上的 Demo 仓库,并告诉您它已在 GitHub 上创建了一个新分支,该分支与您本地的 myBranch 副本相同。下面的终端屏幕截图详细说明了命令的运行及其输出。

Terminal output

如果您转到 GitHub,您可以在分支下拉列表中看到有两个分支可供选择。

GitHub

通过单击 myBranch 切换到它,您可以看到您在该分支上添加的文件。

GitHub

现在有两个不同的分支;一个 master 只有一个文件 README.md,另一个 myBranch 有两个文件。

既然您已经知道如何创建分支,让我们创建另一个分支。输入以下命令

git checkout master
git checkout -b myBranch2
touch newFile2
git add newFile2 
git commit -m "Adding newFile2 to myBranch2"
git push origin myBranch2

我不会显示此终端输出,因为我想让您自己尝试,但是非常欢迎您查看 GitHub 上的仓库

删除分支

既然我们已经添加了两个分支,让我们使用两步过程删除其中一个分支(myBranch)。

1. 删除您分支的本地副本:由于您无法删除您当前所在的分支,请通过运行以下终端图像中显示的命令切换到 master 分支(或您计划保留的另一个分支)

terminal Step 1.Delete the local copy of your branch

git branch 列出可用的分支;checkout 切换到 master 分支,而 git branch -D myBranch 删除该分支。再次运行 git branch 以验证现在只有两个分支(而不是三个)。

2. 从 GitHub 删除分支:通过运行以下命令删除 myBranch 的远程副本

git push origin :myBranch

Terminal output

push 命令中分支名称之前的冒号(:)告诉 GitHub 删除该分支。另一个选项是

git push -d origin myBranch

因为 -d(或 --delete)也告诉 GitHub 删除您的分支。

既然我们已经了解了如何使用 Git 分支,在本系列的下一篇文章中,我们将研究如何获取和变基分支操作。当您与多个贡献者一起处理项目时,这些都是必须了解的基本知识。

User profile image.
Kedar 是 Red Hat 的一名软件质量工程师,致力于 CloudForms(上游 ManageIQ)项目,主要负责内部基础设施的部署/管理。对 Jenkins Pipeline 和 Ansible 在自动化部署方面的应用感兴趣。也在编写用于监控和警报的 Shinken 模块。

2 条评论

Git 是一个出色的工具,无论是用于协作工作还是对于那些独自工作的人来说。祝贺您写出如此出色的教程。

非常好的教程。我真的很喜欢这个系列。期待第 4 部分!

Creative Commons License本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。
© . All rights reserved.