欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Git(标签、分支和合并)1

程序员文章站 2022-05-13 18:58:58
...

git tag 命令

创建标签

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

$ git tag -a beta

此命令将:

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

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

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

  • 标签创建者
  • 标签创建日期
  • 标签消息

上述命令将打开代码编辑器,并等待你为标签输入信息。

Git(标签、分支和合并)1

验证标签

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

Git(标签、分支和合并)1

git log --decorate,显示新建的标签。

Git(标签、分支和合并)1

标签与 commit 相绑定。因此,标签与 commit 的 SHA 位于同一行。

删除标签

如何修正这个错误?最简单的方法是删除这个标签并重新创建。

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

$ git tag -d v1.0

Git(标签、分支和合并)1

git tag 文档

分支

分支的工作原理以及如何在分支之间切换的概述:

Git(标签、分支和合并)1

上图中每个白框表示一次提交,当在仓库中进行提交时,该提交会被添加到分支上,分支指针也会移动并指向它。标签是关联于某次提交的永久指针,它不会移动。但在添加新的提交时,分支会移动。

Git(标签、分支和合并)1

我们在仓库中添加一个新的分支 sidebar。分支非常强大,我们可以借助它,在不同的隔离环境中对同一个项目进行操作。它是如何工作的?当前 HEAD 指针指向 master 分支,master 是活跃分支。我们可以使用 checkout 命令来切换指针所指向的分支。

Git(标签、分支和合并)1

如果现在进行提交,该提交会被添加到 HEAD 所指向的 master 分支上。

Git(标签、分支和合并)1

让我们切换到 sidebar 分支上,并添加一个提交,现在作出的提交将添加到 sidebar 分支。

Git(标签、分支和合并)1

最近的提交和过去的提交相连。红线表示 master 分支中的所有提交,所以提交 7 和 b 不在 master 分支中。所以我们打开代码编辑器,我们对提交 f、4、7、b 所做的更改将不会出现在当前 master 分支的任何文件中,git 仅显示 master 分支中的提交。但不要担心,其它分支的提交也都被安全的保存在仓库中,要将这些提交从仓库中调出,只需切换到我们想要查找的提交所在的分支即可。

git branch 命令用来管理 git 中的分支:

# 列出所有分支
$ git branch

# 创建新的"footer-fix"分支
$ git branch footer-fix

# 删除"footer-fix"分支
$ git branch -d footer-fix

# 强制删除"footer-fix"分支
$ git branch -D footer-fix

列出所有分支

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

Git(标签、分支和合并)1

创建分支

要创建分支,只需使用 git branch + 分支名称

Git(标签、分支和合并)1

虽然你创建了 sidebar 分支,但是它还不是当前分支。你需要切换到该分支。

git checkout 命令

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

$ git checkout sidebar

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

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

Git(标签、分支和合并)1

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

当前 sidebar 和 master 都指向同一 commit,因此当你在这两个分支之间切换时,看起来什么也没变。

git checkout 命令也可以创建一个新的分支。如果你添加 -b 选项,则能够用一个命令创建分支并切换到该分支

# 创建新的 footer 分支并让此 footer 分支的起点位置与 master 分支的一样:
$ git checkout -b footer master

Git(标签、分支和合并)1

日志中的分支

Git(标签、分支和合并)1

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

活跃分支

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

Git(标签、分支和合并)1

# 将创建 alt-sidebar-loc 分支,使其指向 SHA 为 42a69f 的 commit
$ git branch alt-sidebar-loc 42a69f

删除分支

分支用来进行开发或对项目进行修正,不会影响到项目(因为更改是在分支上进行的)。在分支上做出更改后,你可以将该分支组合到 master 分支上。

合并了分支的更改后,你可能不再需要该分支了。如果你想删除分支,可以使用 -d 选项。

$ git branch -d sidebar

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

Git(标签、分支和合并)1

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

git 分支 - 分支的新建与合并

同时查看所有分支

git log 命令非常强大,可以显示此信息。我们将使用新的 --graph--all 选项:

$ git log --oneline --decorate --graph --all

运行此命令将显示仓库中的所有分支和 commit

Git(标签、分支和合并)1

相关标签: git命令