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

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

目的

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

時間 対象者 前提条件
35 分 基本的な Git ワークフローを理解している方 Git をインストール済みの場合
    Bitbucket アカウントを持っている場合

このチュートリアルは、次の操作を含む基本的な Git ワークフローをすでに理解している方を対象としています。

  • クローン: Bitbucket Cloud のリモートリポジトリをローカルシステムにコピーする
  • 追加またはステージ: 行った変更を git 履歴に追加する
  • コミット: 新規または変更済みファイルをリポジトリの git 履歴に追加する
  • プル: 他者の新しい変更を取り込み、自身のローカルリポジトリ内のリポジトリに追加する
  • プッシュ: ローカルシステムでの変更をリモートリポジトリに取り込む

Git の基本を理解していなくてもかまいません。Bitbucket Cloud での Git の使用方法チュートリアルをご覧いただければ、短時間ですぐに理解できます。

ブランチの作成が重要な理由

ブランチの作成は、バージョン管理に Git を最大限に活用できる最適な方法の 1 つです。Git でのブランチの作成では次のことが可能です。

  • 複数のチームが単一のリポジトリから同時に作業できる。
  • Bitbucket Cloud を使用するチームメンバーが世界のどこからでもコラボレーションできる。
  • 複数の開発ラインがお互いに独立して同時に稼働でき、コードフリーズする必要がない。

セットアップする

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

フォークとは?

フォークとは、クローンやコピーを保存する 1 つの方法です。プログラミングでの「フォーク」という用語は、既存のプロセスのコピーを作成する Unix システムコールに由来します。したがって、ブランチとは異なり、フォークは元のリポジトリから独立しています。元のリポジトリが削除されてもフォークは残ります。リポジトリをフォークすると、そのリポジトリと、リポジトリのブランチのすべてを取得できます。

  1. tutorials/tutorials.git.bitbucket.org に移動します。
  2. 画面左側の [+ > Fork this repository (このリポジトリをフォーク)] をクリックします。
  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
      master
      * test-1
  4. 引用を追加して、editme.html ファイルを最新の状態にします。次のような引用を使用できます。
    <div class="quote">
      <blockquote>This is a quote, and I like it.</blockquote>
      <cite>A quote: The Art of Quoting</cite>
    </div>
  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(-)
    注: 1 つの「コミット」として、変更が 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. チュートリアルのリポジトリを開き、[ブランチ] をクリックします。master と 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
      master
      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 ブランチ、およびマージ先ブランチに master があることを確認できます。

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

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

    Pull Request

    また、プルリクエストにチームのレビュアーを追加することもできます。プルリクエストの詳細はこちらをご覧ください。

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

ブランチの削除とローカルで動作するブランチへの master のプル

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

ブランチを削除する理由

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

master をプルし、test-2 にマージする理由

この操作は、別のチームメンバーが作業中のリポジトリで自分も作業する例として使用しています。作業中のブランチへの変更を随時プルし、プルリクエストでのマージ競合を回避することをお勧めします。

  1. 端末を開き、git status コマンドを実行します。その結果は次のようになります。
    $ git status
    On branch test-1
    nothing to commit, working tree clean
    変更を加えるために使用したブランチが表示されて、何も変更されていないことを確認できます。これで、作業を終了したそのブランチを削除する準備ができました。
  2. git checkout master コマンドを実行して、master ブランチに切り替えます。その結果は次のようになります。
    git checkout master
    Switched to branch 'master'
    Your branch is up-to-date with 'origin/master'.
    最新の状態になっていることを示すメッセージに注目してください。これはローカルブランチのみです。その理由は、変更を master にマージしましたが、リモートリポジトリからローカルシステムにはプルしていないためです。次にこれを実行します。
  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 master -> origin/master
    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 master test-2 コマンドを使用して、master ブランチを作業ブランチにマージします。その結果は次のようになります。
    $ git merge master test-2
    Updating 2d4c0ab..dd424cb
    Fast-forward
    editme.html | 6 +++---
    1 file changed, 3 insertions(+), 3 deletions(-)
    次のことを必ず覚えておいてください。
    • アクティブなブランチが重要です。master を test-2 にマージする場合、test-2 をチェックアウト (アクティブ) します。test-2 を master にマージする場合も同様に、master をチェックアウトする必要があります。
    • 必要な時にどのブランチがアクティブかを確認するには、git branch を使用すると、アクティブなブランチにアスタリスクが付けられます。または、git status を使用すると、作業中のブランチと保留中のローカルの変更の有無がわかります。

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

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

Git フィーチャーブランチワークフローは、Bitbucket でチームと協働するための効果的な方法です。このワークフローでは、すべてのフィーチャー開発がメインの master ブランチから分離したブランチで行われます。そのため、複数の開発者がメインコードに触れずに各自のフィーチャー開発作業を行えます。

master ブランチから開始する

このワークフローによって、他の人とコードのコラボレーションができるようになります。Bitbucket とローカルリポジトリが最新の状態であれば開始できます。

new-branch を作成する

作業するフィーチャーまたは課題ごとに別のブランチを使用します。ブランチを作成したら、変更をそのブランチで行えることをローカルで確認します。

変更を更新、追加、コミット、プッシュする

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

コードを確認してもらう

コードに関してフィードバックしてもらい、Bitbucket でプルリクエストを作成します。そこから、レビュアーを追加し、マージする前にすべての準備が整っていることを確認します。 

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

チームメートがコメントを入力して、承認できるようになりました。ローカルでこれらのコメントを解決して、提案された変更を Bitbucket にコミットしてプッシュします。更新した内容はプルリクエストに表示されます。

ブランチをマージする

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

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