用Git进行版本控制(四)分支Branch

前言:
教程来源于Udacity的免费教程-用Git进行版本控制,这里仅是个人的笔记,参考使用。

用Git进行版本控制(四)分支Branch_第1张图片
image.png

git tag:给特定提交(commit)添加额外的标签,额外的提示信息。
git branch:用于创建分支,以此来并行开发项目的不同功能 。
git checkout:在不同的tags和branches之间进行切换。
git merge:合并分支。将不同分支上的修改自动合并。

目前所处的位置
你可以在任一项目中执行这些步骤,我将在 new-git-project 项目中执行。

我们来看看该项目到目前为止的 git log 输出结果:

image.png

以上是已经提交的信息。

git tag 命令
注意所显示的结果(只需注意 SHA 和 commit 消息)

我们将使用 git tag 命令与仓库的标签进行交互:

$ git tag -a v1.0
上述命令将打开代码编辑器,并等待你为标签输入信息。输入"Ready for content"怎么样?

用Git进行版本控制(四)分支Branch_第2张图片
image.png

注意:在上述命令 (git tag -a v1.0) 中,使用了 -a 选项。该选项告诉 git 创建一个带注释的标签。如果你没有提供该选项(即 git tag v1.0),那么它将创建一个轻量级标签。

建议使用带注释的标签,因为它们包含了大量的额外信息,例如:

标签创建者
标签创建日期
标签消息
因此,你应该始终使用带注释的标签。

默认是给最近一次commit添加标签。

验证标签
保存并退出编辑器后,命令行上什么也不会显示。那么如何知道已经向项目中添加了标签呢?只需输入 git tag,命令行会显示仓库中的所有标签。

image.png

我们已经验证了该标签位于仓库中,但是我们想知道它位于仓库的哪个位置。为此,我们需要调用一直在使用的 git log!

image.png

git log 的 --decorate 选项
正如你所了解的,git log 是一个非常强大的工具,可以让我们查看仓库的 commit。我们已经学习了几个选项,现在该学习一个新的选项了。--decorate 选项将显示默认视图隐藏起来的一些详情。

马上去试试运行 git log --decorate 吧!

Git 2.13 中 --decorate 选项的变化
在 2.13 版 git 中,log 命令已改为自动启用 --decorate 选项。这意味着,你不需要在命令中包含 --decorate 选项,因为它已经自动包含了!因此下面的命令输出结果完全一样:

git log --decorate git log

标签信息位于第一行的末尾

HEAD -> master?
你是否注意到,日志中除了显示标签信息之外,--decorate 还显示了 HEAD -> master?这是关于分支的信息!接下来我们将了解 git 中的分支。

删除标签

如果将标签消息中的某个字打错了,或标签名称打错了(输入 v0.1,而不是 v1.0),如何修正这个错误?最简单的方法是删除这个标签并重新创建。

可以通过输入 -d 选项 (表示 delete 删除!)加上标签名称来删除 git 标签:

$ git tag -d v1.0

向以前的 commit 添加标签
运行 git tag -a v1.0 将为最近的 commit 添加标签。但是如果你想向仓库中很久之前的 Commit 添加标签呢?

只需提供要添加标签的 commit 的 SHA 即可!

$ git tag -a v1.0 a87984

向以前的 commit 添加标签
运行 git tag -a v1.0 将为最近的 commit 添加标签。但是如果你想向仓库中很久之前的 Commit 添加标签呢?

只需提供要添加标签的 commit 的 SHA 即可!

$ git tag -a v1.0 a87984
(在弹出代码编辑器以便让你提供标签消息之后)此命令将向 SHA 为 a87084 的 commit 添加标签 v1.0。借助这一技巧,你可以为整个 git 仓库中的任何 commit 添加标签!很强大吧?并且只需在你已经知道的 git 标签命令中加上 commit 的 SHA 即可。

git tag 小结
总结下,git tag 命令用来标记特定的 commit 。当添加新的 commit 时,标签不会移动。

$ git tag -a beta
此命令将:

向最近的 commit 添加标签

如果提供了 SHA,则向具体的 commit 添加标签

分支

用Git进行版本控制(四)分支Branch_第3张图片
image.png

Git有个默认的分支叫master,我们提交commit一次,master就会移动到最近的commit上,像游标一样,而上面提到过的
tag则相当于一个里程碑,是永久不变的,默认分支是master,我们可以通过命令进行切换:
git checkout xxxxx
切换到不同的分支,并进行commit提交后,只会在当前的分支下能够显示,比如我在分支branch1下提交了A,那么我切换回
到master分支,我是看不到A的commit的。

我们可以在指定的commit上创建分支,并针对该分支做其它的功能开发。

git branch 命令
git branch 命令用来与 git 的分支进行交互:

$ git branch
它可以用来:

列出仓库中的所有分支名称

创建新的分支

删除分支

如果我们只输入 git branch,则 git 将列出仓库中的分支:

image.png

创建分支
要创建分支,只需使用 git branch 并提供要创建的分支对应的名称。因此,如果你想创建一个叫做"sidebar"的分支,只需运行以下命令:

$ git branch sidebar

image.png

git checkout 命令
注意,在进行 commit 时,该 commit 将添加到当前分支上。虽然我们创建了新的 sidebar 分支,但是没有向其添加新的 commit,因为我们尚未切换到该分支。如果我们现在进行 commit 的话,该 commit 将添加到 master 分支,而不是 sidebar 分支。我们已经在演示中看到这一情况,要在分支之间进行切换,我们需要使用 git 的 checkout 命令。

$ git checkout sidebar

请务必了解该命令的工作方式。运行该命令将:

从工作目录中删除 git 跟踪的所有文件和目录
(git 跟踪的文件存储在仓库中,因此什么也不会丢失)
转到仓库,并提取分支指向的 commit 所对应的所有文件和目录

因此此命令将删除 master 分支中的 commit 引用的所有文件。它会将这些文件替换为 sidebar 分支中的 commit 引用的文件。理解这一部分十分重要,所以请务必多读几遍工作方式。

image.png

在上述输出中,注意我们之前见到的特殊指示符"HEAD"具有一个指向 sidebar 分支的箭头。它指向 sidebar 是因为 sidebar 分支是当前分支,现在提交的任何 commit 将添加到 sidebar 分支

活跃分支
提示符将显示活跃分支。但这是我们对提示符进行的特殊自定义,如果你使用的是不同的计算机,判断活跃分支的最快速方式是查看 git branch 命令的输出结果。活跃分支名称旁边会显示一个星号。


image.png

删除分支
分支用来进行开发或对项目进行修正,不会影响到项目(因为更改是在分支上进行的)。在分支上做出更改后,你可以将该分支组合到 master 分支上(这种“分支组合过程”叫做“合并”(merge),稍后将详细讲解)

合并了分支的更改后,你可能不再需要该分支了。如果你想删除分支,可以使用 -d 选项。下面的命令包含 -d 选项,告诉 git 删掉给出的分支(这里是"sidebar"分支)。

$ git branch -d sidebar

注意,无法删除当前所在的分支。因此要删除 sidebar 分支,你需要切换到 master 分支,或者创建并切换到新的分支。

删除内容让人比较紧张。但是不用担心。如果某个分支上有任何其他分支上都没有包含的 commit(也就是这个 commit 是要被删除的分支独有的),git 不会删除该分支。如果你创建了 sidebar 分支,向其添加了 commit,然后尝试使用 git branch -d sidebar 删除该分支,git 不会让你删除该分支,因为你无法删除当前所在的分支。如果你切换到 master 分支并尝试删除 sidebar 分支,git 也不会让你删除,因为 sidebar 分支上的新 commit 会丢失!要强制删除,你需要使用大写的 D 选项 - git branch -D sidebar。

git branch 小结
总结下,git branch 命令用来管理 git 中的分支:

列出所有分支

$ git branch

创建新的"footer-fix"分支

$ git branch footer-fix

删除"footer-fix"分支

$ git branch -d footer-fix
此命令用来:

列出本地分支

创建新的分支

删除分支

高效分支

你已经学会了如何创建、列出和删除分支,我们来运用下所学的知识吧!

首先,确保我们保持相同的进度,并拥有相同的起始代码。我们将在 new-git-project 项目中进行操作。该项目具有以下文件:

index.html

css/app.css(空文件)

js/app.js(空文件)

CSS 和 JavaScript 文件是空的。确保 index 文件具有以下内容:




    
    Blog Project
    
    
    



    

Expedition

Made with ♥ @ Udacity

(这里我建议是重新建立一个repo,然后跟着操作一步一步来,之前的repo我做了太多的操作,比较乱)

用Git进行版本控制(四)分支Branch_第4张图片
image.png

完成图中所必要的每一步操作。

策略
现在,所有代码都位于 master 分支(默认分支)上。我们通过以下操作利用分支进行工作:

向分支中添加内容
创建新的分支
在分支之间切换

让我们使用分支完成以下更改:
在 master 分支上 - 向页面添加默认颜色
创建一个 sidebar 分支 - 为页面创建侧栏
在 master 分支上 - 更改页面的标题
在 sidebar 分支上 - 向侧栏中添加更多内容
创建一个 footer 分支 - 向脚注中添加社交链接

更改 1 - 添加页面颜色
确保位于 master 分支上,并向 css/app.css 添加以下内容:

body {
    background-color: #00cae4;
}

保存文件,然后将该文件添加到暂存区,并将其 commit 到仓库。

image.png

更改 2 - 添加侧栏
我们向页面上添加一个侧栏。但是假定我们不确定是否喜欢新的背景色。因此我们要将 sidebar 分支放在设置页面颜色的 commit 之前。你的 SHA 可能会不一样,但对我来说,在添加颜色的 commit 之前的 commit 具有 SHA 759e74e(已经改为我的分支SHA,即最新的一次commit,我们创建分支,然后在分去上添加侧栏的代码!!!)。因此向该 commit 添加分支的命令是:

$ git branch sidebar 759e74e

现在使用 git checkout 命令切换到新的 sidebar 分支。运行 git log --oneline --decorate 显示以下结果:

image.png

通过向 HTML 文件添加以下

你可能感兴趣的:(用Git进行版本控制(四)分支Branch)