在本系列的前两篇文章中,我们开始使用 Git 并学习了如何克隆、修改、添加和删除 Git 文件。在第三部分中,我们将探讨 Git 分支以及为什么和如何使用它。
将这棵树想象成一个 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 中的所有文件。现在您的终端将如下所示
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
分支上,并且没有任何内容需要提交。这是因为既没有新文件,也没有对现有文件的任何修改。
如果您想查看分支的可视化表示,请运行命令 gitk
。如果计算机提示 bash: gitk: command not found…
,则安装 gitk
。(有关安装说明,请参阅您的操作系统文档。)
下图报告了我们在 Demo 中所做的事情:您的最后一次提交是 Delete file.txt
,并且在此之前有三次提交。当前提交用黄点表示,之前的提交用蓝点表示,黄点和 Delete file.txt
之间的三个框告诉您每个分支的位置(即,每个分支上的最后一次提交是什么)。由于您刚刚创建了 myBranch
,它与 master
和 master
的远程副本 remotes/origin/master
位于相同的提交上。(非常感谢 Red Hat 的 Peter Savage,他让我了解了 gitk
。)
现在让我们在我们的 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
所做的任何更改。
下一步是将 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
副本相同。下面的终端屏幕截图详细说明了命令的运行及其输出。
如果您转到 GitHub,您可以在分支下拉列表中看到有两个分支可供选择。
通过单击 myBranch
切换到它,您可以看到您在该分支上添加的文件。
现在有两个不同的分支;一个 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
分支(或您计划保留的另一个分支)

git branch
列出可用的分支;checkout
切换到 master
分支,而 git branch -D myBranch
删除该分支。再次运行 git branch
以验证现在只有两个分支(而不是三个)。
2. 从 GitHub 删除分支:通过运行以下命令删除 myBranch
的远程副本
git push origin :myBranch
push
命令中分支名称之前的冒号(:
)告诉 GitHub 删除该分支。另一个选项是
git push -d origin myBranch
因为 -d
(或 --delete
)也告诉 GitHub 删除您的分支。
既然我们已经了解了如何使用 Git 分支,在本系列的下一篇文章中,我们将研究如何获取和变基分支操作。当您与多个贡献者一起处理项目时,这些都是必须了解的基本知识。
2 条评论