了解 Bitbucket Cloud 的 Git

了解 Bitbucket Cloud 的分支

目标

本教程将教您使用 Git 和 Bitbucket Cloud 创建、查看和合并分支以及在分支中工作的基础知识。

时间 观众 先决条件
35 分钟 您已经了解了基本的 Git 工作流程 您已经安装 Git
您拥有 Bitbucket 帐户

如果您已经了解了基本的 Git 工作流程,包括如何:

  • 克隆:将 Bitbucket Cloud 中的远程存储库复制到您的本地系统
  • 添加或暂存:接受您所做的变更,准备好将它们添加到您的 git 历史记录中
  • 提交:将新的或变更的文件添加到存储库的 Git 历史记录中
  • 拉取:将其他人添加到存储库的新变更保存到您的本地存储库中
  • 推送:将变更从本地系统获取到远程存储库

如果您不了解 Git 基础知识,不用担心,只需查阅我们的了解使用 Bitbucket Cloud 的 Git 教程,您很快就能掌握最新知识。

为什么分支很重要

分支是充分利用 Git 进行版本控制的最佳方法之一。通过 Git 中的分支,您可以:

  • 让多个团队同时在同一个存储库中工作。
  • 让世界各地的团队成员使用 Bitbucket Cloud 进行协作。
  • 同时运行多行开发,相互独立,且无需冻结代码。

准备工作

因为我们希望您能感觉自己在团队中工作,所以在一个普通的 Bitbucket 存储库中,我们会让您克隆一个我们提供的公共存储库。

什么是克隆?

克隆是保存克隆或副本的另一种方式。术语克隆(在编程中)源自创建现有流程副本的 Unix 系统调用。因此,与分支不同,克隆独立于原始存储库。如果原始存储库被删除,克隆仍然存在。如果您克隆了一个存储库,您就会得到这个存储库及其所有分支。

  1. 前往 tutorials/tutorials.git.bitbucket.org
  2. 单击屏幕左侧的 + > 克隆此存储库
  3. 修改名称,使其对您的团队来说是唯一的,然后单击克隆存储库
  4. 为存储库创建一个易于导航的目录。您可以选择类似这样的:
     $ mkdir test-repositories $ cd test-repositories/ $ test-repositories
    前面的示例使用 mkdir(创建目录)命令创建测试存储库目录,并使用 cd(变更目录)命令切换到该目录。
  5. 将克隆存储库克隆到您刚刚创建的目录中。它可能类似于下方的内容:
     $ git clone https://dstevenstest@bitbucket.org/dstevenstest/mygittutorial.bitbucket.io.git Cloning into 'mygittutorial.bitbucket.io'... remote: Counting objects: 12392, done. remote: Compressing objects: 100% (12030/12030), done. remote: Total 12392 (delta 8044), reused 564 (delta 360) Receiving objects: 100% (12392/12392), 2.72 MiB | 701.00 KiB/s, done. Resolving deltas: 100% (8044/8044), done. $ cd mygittutorial.bitbucket.io/
    使用 git clone 命令克隆存储库,并创建克隆创建的目录 mygittutorial.git.bitbucket.io

使用分支工作流程创建分支并变更某些内容

您要在您网站上的这个分支中添加引号。

  1. 使用 git branch 命令创建分支。
     $ git branch test-1
  2. 使用 git checkout 命令查看您刚刚创建的分支。
     $ git checkout test-1 Switched to branch 'test-1'
  3. 使用 git branch 命令列出您在本地拥有的分支。
     $ git branch main * test-1
  4. 对 editme.html 进行更新通过添加引号来归档。您可以使用类似于下方的内容:
     
    This is a quote, and I like it.
    A quote: The Art of Quoting
  5. 添加该变更。
     git add editme.html
    注意:您的变更尚未提交到 Git 历史记录中,处于“等待”状态。我们在保存变更中了解了这一点。
  6. 使用描述性提交消息提交变更。
     git commit editme.html -m'added a new quote' [test-1 063b772] added a new quote 1 file changed, 3 insertions(+), 3 deletions(-)
    注意:现在,这些变更作为单次“提交”已成为 Git 历史记录的一部分。我们在保变更改中了解了这一点。
  7. 使用 git push 命令将该变更推送到 Bitbucket。
     git push fatal: The current branch test-1 has no upstream branch. To push the current branch and set the remote as upstream, use git push --set-upstream origin test-1
    您会看到一个错误,因为当您第一次推送在本地创建的新分支时,您必须指定该分支。
  8. 使用 git push branch 命令推送分支并进行变更。
     $ git push origin test-1 Counting objects: 3, done. Delta compression using up to 8 threads. Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 363 bytes | 0 bytes/s, done. Total 3 (delta 2), reused 0 (delta 0) remote: remote: Create pull request for test-1: remote: https://bitbucket.org/dstevenstest/dans.git.bitbucket.org/pull-requests/new?source=test-1&t=1 remote: To https://bitbucket.org/dstevenstest/dans.git.bitbucket.org.git * [new branch] test-1 -> test-1
    这告诉系统原始存储库是这个新分支的目标。
  9. 打开教程存储库并单击“分支”。现在,您应该可以看到 main 和 test-1 分支。它应该类似于下方的内容:
学习 Bitbucket 分支

创建、提取和签出远程分支

当您在团队中工作时,您可能需要拉取或提取其他团队成员创建的分支并推送到 Bitbucket。本示例将为您提供一些创建和使用其他人创建的分支的基础知识。

  1. 分支转到 Bitbucket 中的教程存储库,然后单击分支。您应能看到类似下面这样的内容:Branches
  2. 单击创建分支,将分支命名为 test-2,然后单击创建
  3. 在签出分支对话框中复制 git fetch 命令。它可能类似于下方的内容:
     $ git fetch && git checkout test-2 From https://bitbucket.org/dstevenstest/dans.git.bitbucket.org * [new branch] test-2 -> origin/test-2 Branch test-2 set up to track remote branch test-2 from origin. Switched to a new branch 'test-2'
  4. 在终端中使用 git branch 命令。您应该会看到一个像这样的分支列表:
     $ git branch main test-1 * test-2
    带有星号 * 的分支是活动分支。当您在分支工作流程中工作时,记住这一点至关重要。
  5. 使用 git status 命令,您会看到下方内容:
     $ git status On branch test-2 Your branch is up-to-date with 'origin/test-2'. nothing to commit, working tree clean
    您可以看到您在哪个分支上,以及该分支目前与您的远程(源)分支保持同步。
  6. 使用 git checkout 命令将焦点改回您的其他分支。命令类似于下方的内容:
     $ git checkout test-1 Switched to branch 'test-1' Your branch is ahead of 'origin/test-1' by 3 commits. (use "git push" to publish your local commits)
    在分支中工作时要记住的最重要的事情之一是,您要确保您要变更的分支是正确的分支。

推送变更并创建拉取请求

现在是时候审核您的第一个变更并合并分支了。

  1. 单击 +> 创建拉取请求。您可以将您的 test-1 分支视为源分支,main 分支在目标分支中。

    因为我们通过克隆现有存储库创建了这个存储库,所以目标设置为我们克隆的存储库的主分支。

    要纠正这个问题,您需要将存储库目标分支(您要合并变更的分支)从 tutorials/tutorials.git.bitbucket.org 变更为您的存储库。

    拉取请求

    您还可以在拉取请求中添加团队中的审阅者。了解更多有关拉取请求的信息

  2. 单击创建拉取请求
  3. 通过在 diff(显示您对 editme.html 文件所做变更的区域)中选择一行,在拉取请求中发表评论。
  4. 单击页面左上角的批准。当然,在真正的拉取请求中,会有审阅者发表评论
  5. 单击合并
  6. (可选)使用更多详细信息更新提交消息
  7. 从两个选项中选择合并提交合并策略:
    • 合并提交——保留源分支的所有提交,并使它们成为目标分支的一部分。此选项与在命令行中输入 git merge --no-ff 相同。
    • Squash——将源分支合并到目标分支时合并您的提交。此选项与在命令行中输入 git merge --squash 相同。
    了解更多有关这两种合并策略的详细信息。
  8. 单击提交,您将看到刚刚合并的分支如何适应更大的变更方案。

删除分支并将主分支拉入本地工作分支

现在,您已经完成了基本的分支工作流程,您的变更已进入主分支。我们要学习的最后一件事是如何删除刚刚合并的分支,拉取更新的主分支,并将更新的主分支合并到您的 test-2 分支中。

为什么要删除分支?

请记住,Git 中的分支与 SVN 或类似版本控制系统的不同之处在于,它既使用长期运行分支(如主分支和开发分支),又使用短期开发分支(如我们在本教程中使用的示例)。鉴于这个用例的情况,删除本地分支以保持本地环境更干净并不是一个坏主意。

为什么要拉取主分支并将其合并到 test-2 中?

我们以此为例,假设您正在存储库中工作,而另一个团队成员也正在处理这个存储库。不时将变更拉取到工作分支中是个好主意,以防止拉取请求中出现合并冲突。

  1. 打开终端并运行 git status 命令,结果应该类似于下方的内容:
     $ git status On branch test-1 nothing to commit, working tree clean
    您可以看到您在刚才用来进行变更的分支上,但没有任何变更。既然我们已经完成了这项工作,我们可以删除那个分支了。
  2. 通过运行 git checkout main 命令切换到主分支。结果应该类似于下方的内容:
     git checkout main Switched to branch 'main' Your branch is up-to-date with 'origin/main'.
    注意到消息显示您是最新的?这只是您的本地分支。我们之所以知道这一点,是因为我们刚刚将一个变更合并到主存储库中,并且没有将该变更从远程存储库拉取到我们的本地系统。这就是我们接下来要做的。
  3. 运行 git pull 命令。结果应该类似于下方的内容:
     $ git pull remote: Counting objects: 1, done. remote: Total 1 (delta 0), reused 0 (delta 0) Unpacking objects: 100% (1/1), done. From https://bitbucket.org/dstevenstest/dans.git.bitbucket.org 2d4c0ab..dd424cb main -> origin/main Updating 2d4c0ab..dd424cb Fast-forward editme.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
    发生的情况是,当您从远程存储库拉取变更时,git 会运行快速合并来整合您所做的变更。它还列出了该文件中有多少文件和行发生了变化。
  4. 运行 git branch -d {branch_name} 命令移除 test-1 分支。结果类似于下方的内容:
     $ git branch -d test-1 Deleted branch test-1 (was 063b772)
    您可以看到它删除了分支以及该分支的最后一次提交哈希是什么。这是删除分支的安全方法,因为如果分支有未提交的变更,git 将不允许您删除分支。但是您应该知道,这不会阻止删除已提交到 git 历史记录但未合并到另一个分支的变更。
  5. 使用 git checkout 命令切换到 test-2 分支。
     $ git checkout test-2 Switched to branch 'test-2' Your branch is up-to-date with 'origin/test-2'.
  6. 使用 git merge main test-2 命令将主分支合并到您的工作分支中。结果类似于下方的内容:
     $ git merge main test-2 Updating 2d4c0ab..dd424cb Fast-forward editme.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
    请务必记住以下几点:
    • 活跃的分支很重要。如果您想将 main 合并到 test-2 中,您需要签出(激活)test-2。如果您想将 test-2 合并到 main 也是如此,需要签出 main。
    • 要随时查看哪个分支处于活动状态,请使用 git branch,活动分支将带有星号或使用 git status,它会告诉您您想要的分支以及是否有待处理的本地变更。

我们希望您对分支和所涉及的命令有所了解。我们回顾一下刚才介绍的内容:

查看分支工作流程

Git 功能分支工作流程是在 Bitbucket 中与团队合作的高效方法。在此工作流程中,所有功能开发都在与主分支分开的分支上进行。因此,多个开发人员可以在不触及主代码的情况下开发自己的功能。

从主分支开始

此工作流程可帮助您与至少一个其他人协作处理您的代码。只要您的 Bitbucket 和本地代码存储库是最新的,您就可以开始了。

创建新分支

为您正在处理的每个功能或事务使用单独的分支。创建分支后,在本地将其签出,这样您所做的任何变更都将在该分支上生效。

更新、添加、提交和推送变更

开发该功能并像每次使用 Git 一样进行提交。准备就绪后,推送提交,更新 Bitbucket 上的功能分支。

审查您的代码

要获得有关您的代码的反馈,请在 Bitbucket 中创建拉取请求。从那里,您可以添加审阅者并确保在合并之前一切顺利。

解决反馈

现在您的队友发表评论并批准。在本地解决他们的评论,提交变更,然后将其推送到 Bitbucket。您的更新显示在拉取请求中。

合并您的分支

在合并之前,如果其他人对代码存储库进行了更改,则可能需要解决合并冲突。当您的拉取请求获得批准且没有冲突时,您可以将代码添加到 main 分支。从 Bitbucket 中的拉取请求合并。

本教程在展示分支如何提高团队效率方面的能力有限。分支有几种方法,我们在比较工作流程中讨论了其中部分方法。