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

版权声明:如有转载请注明出处 http://blog.csdn.net/modurookie ,谢谢 https://blog.csdn.net/MoDuRooKie/article/details/82113973

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 tag,命令行会显示仓库中的所有标签。

这里写图片描述

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

这里写图片描述

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

删除标签

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

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

$ git tag -d v1.0

这里写图片描述

git tag 文档

分支

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

这里写图片描述

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

这里写图片描述

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

这里写图片描述

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

这里写图片描述

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

这里写图片描述

最近的提交和过去的提交相连。红线表示 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 branch + 分支名称

这里写图片描述

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

git checkout 命令

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

$ git checkout sidebar

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

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

这里写图片描述

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

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

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

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

这里写图片描述

日志中的分支

这里写图片描述

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

活跃分支

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

这里写图片描述

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

删除分支

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

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

$ 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 分支 - 分支的新建与合并

同时查看所有分支

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

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

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

这里写图片描述

猜你喜欢

转载自blog.csdn.net/MoDuRooKie/article/details/82113973