Bitbucket Cloud での Git の使用方法についてのチュートリアルです。

Bitbucket Cloud でのブランチの使用方法

目的

このチュートリアルでは Git および Bitbucket Cloud を使用したブランチの作成、操作、レビュー、マージの概要について説明します。

所要時間 対象者 前提条件
35 分 あなたはすでに基本的な Git ワークフローを理解しています Git をインストール済である
Bitbucket アカウントを持っている

このチュートリアルは、以下の方法を含む基本的な Git ワークフローをすでに理解している人のためのものです。

  • クローン: Bitbucket Cloud のリモート リポジトリをローカル システムにコピーする
  • 追加またはステージ : 実施した変更を取り出し、Git 履歴に追加する準備を整える
  • コミット: リポジトリの Git 履歴に新しいファイルまたは変更されたファイルを追加する
  • プル: 他のユーザーがリポジトリに追加した新しい変更をローカル リポジトリに入れる
  • プッシュ: ローカル システムからリモート リポジトリに変更を取得する

Git の基本がわからない場合は、Bitbucket Cloud での Git の使用方法のチュートリアルを確認すればすぐに理解できるようになります。

ブランチングが重要な理由

ブランチングは、バージョン管理のために Git を最大限に活用するための最良の方法の 1 つです。Git でブランチングすると、次のことが可能になります。

  • 複数のチームが 1 つのリポジトリで同時に作業できます。
  • Bitbucket Cloud を利用し、チーム メンバーが世界中のどこにいても協力してもらえます。
  • コードをフリーズさせる必要なく、複数の開発ラインを互いに独立して同時に実行できます。

セットアップする

チームで連携していることを認識できるように、よく使われる Bitbucket リポジトリで、当社が提供しているパブリックリポジトリをフォークしていただきます。

フォークとは

フォークは、クローンまたはコピーを保存する別の方法です。フォークというプログラミング用語は、既存のプロセスのコピーを作り出す Unix のシステム コールからの派生です。そのため、ブランチとは異なり、フォークは元のリポジトリから独立しています。元のリポジトリが削除されても、フォークは残ります。リポジトリをフォークすると、そのリポジトリおよびそのブランチがすべて取得されます。

  1. tutorials/tutorials.git.bitbucket.org に移動します。
  2. 画面の左側にある[ + > Fork this repository (このリポジトリをフォーク)] の順にクリックします。
  3. チームに一意になるように名前を変更し、[Fork repository (リポジトリのフォーク)] をクリックします。
  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
    注: 1 つの「コミット」として、変更が 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(-)
    注: 1 つの「コミット」として、変更が Git 履歴の一部となりました。これについては、変更の保存で確認しました。
  7. git push コマンドを使用してその変更を Bitbucket にプッシュします。
     git push fatal: The current branch test-1 has no upstream branch. 現在のブランチをプッシュし、リモートを上流に設定するには、 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 をクリックします。次のような情報が表示されます。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 つは、変更を加えているブランチが正しいブランチであることを確認することです。

変更のプッシュとプルリクエストの作成

今度は、最初の変更をレビューし、ブランチをマージします。

  1. [+> プル リクエストを作成] をクリックします。ソース ブランチとして test-1 ブランチ、およびマージ先ブランチに main があることを確認できます。

    このリポジトリは既存のリポジトリをフォークして作成したため、フォークしたリポジトリの main ブランチにマージ先が設定されます。

    これを修正するには、tutorials/tutorials.git.bitbucket.org からリポジトリにコピー先のブランチ (変更をマージするブランチ) を変更する必要があります。

    プルリクエスト

    また、チームのレビュアーをプル リクエストに追加します。プル リクエストについての詳細をご確認ください

  2. [プル リクエストの作成] をクリックします。
  3. 差分 (editme.html ファイルに加えた変更を表示する領域) の行を選択して、プル リクエストにコメントを付けます。
  4. ページの左上にある [Approve (承認)] をクリックします。もちろん、実際のプル リクエストでは、レビュアーがコメントを作成します。
  5. [マージ] をクリックします。
  6. (オプション) コミット メッセージに詳細を追加して更新します。
  7. Merge commit マージ戦略を 2 つのオプションから選択します。
    • Merge commit - ソース ブランチのすべてのコミットを保持し、それらを宛先ブランチの一部にします。このオプションは、コマンド ラインで git merge --no-ff と入力した場合と同じです。
    • Squash - ソース ブランチを宛先ブランチにマージする際にコミットを組み合わせます。このオプションは、コマンド ラインで git merge --squash と入力した場合と同じです。
    これら 2 種類のマージ戦略の詳細については、こちらをご覧ください
  8. [コミット] をクリックすると、マージしたブランチが大きな変更スキームにどのように収まるかがわかります。

ブランチを削除してローカルで動作するブランチへ main をプルする

ここまでで基本的なブランチ ワークフローの手順を踏んで、変更が main に保存されました。最後に学習するのは、マージしたブランチを削除する方法です。更新した main ブランチをプルして、test-2 ブランチにマージします。

ブランチを削除する理由

Git におけるブランチの作成は、main や開発ブランチなど、ブランチを長期間使用する SVN や類似のバージョン管理システムとは異なることにご注意ください。このチュートリアルで使用しているブランチは、例に示すような短期間の開発ブランチです。短期間の開発ブランチでは、ローカル環境をクリーンに保持するためにローカル ブランチを削除することをお勧めします。

main をプルして test-2 にマージする理由

これは、別のチーム メンバーが作業しているリポジトリで作業している例として使用しています。プル リクエストのマージ競合を防ぐために、時々変更を作業ブランチにプルすることをお勧めします。

  1. ターミナルを開き、git status コマンドを実行すると、結果は次のようになるはずです。
     $ git status On branch test-1 nothing to commit, working tree clean
    変更するために使用したブランチにいて、変更が実施されていないことがわかります。その作業が終わったので、そのブランチは削除できます。
  2. git checkout main コマンドを実行して、main ブランチに切り替えます。結果は次のようになるはずです。
     git checkout main Switched to branch 'main' Your branch is up-to-date with 'origin/main'.
    最新になったというメッセージが表示されますか? これはあなたのローカル ブランチだけです。変更を 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. test-1 ブランチを削除するには、git branch -d {branch_name} コマンドを実行します。結果は次のようになります。
     $ 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 コマンドを使用して、main ブランチを作業ブランチにマージします。結果は次のようになります。
     $ 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 ブランチでいつでも確認でき、アクティブなブランチにはアスタリスクがついています。または Git ステータスを使用すると、あなたのブランチと保留になっているローカルの変更があるかどうかがわかります。

ブランチの一部、およびそれに関連するコマンドについて理解できたと思います。それでは、学習した内容を振り返ってみましょう。

ブランチワークフローの確認

Git のフィーチャー ブランチ ワークフローは、Bitbucket におけるチームの作業開始に役立つ効果的な方法です。このワークフローでは、main ブランチから分岐する各ブランチにすべての機能開発タスクが割り当てられます。これによって、複数の開発者が main コードに触れずにそれぞれの機能開発に取り組めます。

main ブランチから開始する

このワークフローは、2 人以上のグループでコードに対して共同で取り組む場合に役立ちます。Bitbucket とローカル リポジトリが同期されているのを確認したら、ワークフローを開始しましょう。

new-branch を作成する

各フィーチャーまたは作業中の課題で別々のブランチを使います。ブランチを作成したら、ローカルでチェックアウトして、加えたすべての変更がそのブランチに含まれるようにします。

変更の更新、追加、コミット、プッシュ

Git を使っているときと同じように、機能での作業を行ってコミットを実行します。準備ができたら、コミットをプッシュして、Bitbucket のフィーチャー ブランチを更新します。

コードのレビューを依頼する

Bitbucket でプル リクエストを作成して、コードへのフィードバックを依頼します。そこからレビュアーを追加してマージの前に問題がないことを確認できます。

フィードバックを解決する

チームメイトがコメントを追加して、コードを承認しました。コメントをローカルで解決して、変更を Bitbucket にコミットおよびプッシュします。更新内容がプル リクエストに表示されます。

ブランチをマージする

マージの前に、他の人がリポジトリに変更を加えた場合はマージの競合を解決する必要があることがあります。プル リクエストが承認されて競合がなくなったら、コードを main ブランチに追加できます。Bitbucket でプル リクエストからマージします。

ブランチによってチームがより効果的に作業する方法は、このチュートリアルではすべて紹介しきれません。ブランチの作成には複数のアプローチがありますが、その一部をワークフローの比較で説明します。