Git ブランチを使用してファイルをマージする

宇宙ステーションの管理者になるには、特定の責任が伴います。太陽系の新しい場所のマップを作成する場合など、情報をロックダウンする必要があることがあります。ブランチについて学習することで、ファイルをメイン ソースと独立して更新し、準備が整った場合にのみ変更を共有できるようになります。

ブランチは、リポジトリの開発作業の独立したラインを表します。新しい作業ディレクトリ、ステージング領域、プロジェクト履歴のようなものと考えるといいでしょう。新しいブランチを作成する前に、自動でメイン ブランチで作業に取り掛かることになります。次の図は、master ブランチとその他のバグ修正更新のブランチを視覚的にわかるように示したものです。

Bitbucket Cloud におけるブランチ

ブランチが最大限に実力を発揮するのは、チームで作業する際です。自分のブランチにあるプロジェクトの担当部分で作業して、必要に応じて master から更新をプルします。その後、準備が整ったらすべての作業を master ブランチにマージできます。アトラシアンのドキュメントで、ブランチを使用する理由が詳述されています。

ステップ 1: ブランチの作成と変更

宇宙ステーションの今後の計画を追加するための、コミット準備中のブランチを作成します。計画を全員に伝える準備が整ったら、Bitbucket リポジトリに変更をマージし、不要になったブランチは削除できます。

ブランチはコミットに対するポインターに過ぎないことを理解しておくことが重要です。ブランチを作成すると、すべての Git は新しいポインターを作成する必要があります。一連の新しいファイルやフォルダーは作成不要です。手順を開始する前のリポジトリは、次のようになります。  

ブランチ図

ブランチを作成するには、以下を実行します。

  1. ターミナル ウィンドウを開き、次のコマンドを使用してローカル リポジトリの最上位に移動します。 

macOS / Linux / Git Bash

1 $ cd ~/repos/bitbucketstationlocations/

Windows コマンド プロンプト

1 $ cd repos\bitbucketstationlocations\

2. ターミナル ウィンドウからブランチを作成します。

1 $ git branch future-plans

このコマンドはブランチを作成しますが、そのブランチに移動はしません。したがって、リポジトリは次のようになります。

新しいブランチを作成した後のブランチ図

リポジトリの履歴には何の変更も加えられません。新規作成されるのは、現在のブランチに対するポインターのみです。新しいブランチの作業を開始するには、使用するブランチをチェックアウトする必要があります。

3. 先ほど作成した新しいブランチをチェックアウトして使用します。

1 2 $ git checkout future-plans Switched to branch 'future-plans'

git checkout  コマンドは、git branch  と連携して動作します。新しい作業を行うためにブランチを作成するため、git branch を使用して新しいブランチを作成するたびに git checkout を使用してそれをチェック アウトします。新しいブランチをチェックアウトすると、Git ワークフローは次のようになります。

ブランチをチェックアウトした後の Git ワークフロー図

4. ローカル システムで bitbucketstationlocations フォルダを検索して開きます。新しいブランチを作成した結果として、ディレクトリに新しいファイルやフォルダーは追加されていないことがわかります。

5. テキスト エディターで stationlocations ファイルを開きます。
6. 別のステーションの場所を追加してファイルを変更します。

1 2 3 4 5 6 7 8 9 <p>Bitbucket has the following space stations:</p> <p> <b>Earth's Moon</b><br> Headquarters </p> <p> <b>Mars</b><br> Recreation Department </p>

7. ファイルを保存して閉じます。
8. ターミナル ウィンドウに「git status」と入力します。次のように表示されます。  

1 2 3 4 5 6 7 $ git status On branch future-plans Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: stationlocations no changes added to commit (use "git add" and/or "git commit -a")

On branch future-plans 行が表示されています。これまでに git status を入力していた場合、master ブランチは 1 つしか持つことができないため、この行は On branch master でした。変更をステージングまたはコミットする前に、必ずこの行を見て、変更を追加するブランチがチェックアウトされていることをご確認ください。

9. ファイルをステージングします。

1 $ git add stationlocations

10. 以下のように、ターミナル ウィンドウに「git commit」コマンドを入力します。

このコミットで、リポジトリは次のようになります。

マージ前の変更を示すブランチ図

ここで、master ブランチに加えた変更をマージします。

ステップ 2. ブランチのマージ: 早送りマージ

宇宙ステーションは成長を続けており、火星の拠点で開会式を行うときがやってきました。今後の計画が現実のものとなったため、future-plans ブランチをローカル システムの main ブランチにマージできます。

1 つのブランチのみを作成して 1 つの変更を加えたため、fast-forward ブランチ方式でマージします。ターゲット ブランチに対して現在のブランチの先頭が一本道になっているため、fast-forward マージを実行できます。ブランチを「実際に」マージする代わりに、すべての Git は現在のブランチの先頭をターゲット ブランチの先頭に移動して (fast-foward (早送り) する) 履歴を統合する必要があります。これによって、ターゲット ブランチからアクセス可能なすべてのコミットが現在のブランチで利用できるようになるため、履歴を効果的に組み合わせられます。

変更がマージされた後のブランチのブランチ図

このブランチ ワークフローは小さな変更を伴う短期間のトピック ブランチに共通しており、長期間実行されているような機能では一般的ではありません。

fast-forward マージを完了させるには、次の手順を行います。

  1. ターミナル ウィンドウを開き、ローカル リポジトリの最上位に進みます。

macOS / Linux / Git Bash

1 $ cd ~/repos/bitbucketstationlocations/

Windows コマンド プロンプト

1 $ cd repos\bitbucketstationlocations\

2. 「git status」コマンドを入力して、すべての変更がコミットされたことと、チェック アウトしたブランチを確認します。

1 2 3 $ git status On branch future-plans nothing to commit, working directory clean

3. master ブランチに切り替えます。

1 2 3 $ git checkout master Switched to branch 'master' Your branch is up-to-date with 'origin/master'.

4. future-plans ブランチの変更を master ブランチにマージします。次のようになります。

1 2 3 4 5 $ git merge future-plans Updating fcbeeb0..e3b7732 Fast-forward stationlocations | 4 ++++ 1 file changed, 4 insertions(+)

これで、master ブランチのポインタを現在の先頭に移動させました。リポジトリは次のようになります。

変更がマージされた後のブランチ図

5. future-plans を今後使用する予定はないため、ブランチを削除できます。

1 2 $ git branch -d future-plans Deleted branch future-plans (was e3b7732).

future-plans を削除しても、コミット ID を使用して master からブランチに引き続きアクセスできます。たとえば、future-plans に追加した変更を元に戻したい場合は、受け取ったばかりのコミット ID を使用してそのブランチに戻ります。

6. 「git status」と入力してマージの結果を確認します。リモート リポジトリの 1 つ先にローカル リポジトリが表示されます。次のようになります。

1 2 3 4 5 $ git status On branch master Your branch is ahead of 'origin/master' by 1 commit. (use "git push" to publish your local commits) nothing to commit, working directory clean

ここまでの操作で、次の内容を実行しました。

  • ブランチの作成とチェックアウト

  • 新しいブランチへの変更

  • 新しいブランチへの変更のコミット

  • メイン ブランチへの変更の統合

  • 不要になったブランチの削除

次に、この作業すべてを、リモート リポジトリである Bitbucket にプッシュする必要があります。

ステップ 3. 変更を Bitbucket へプッシュ

自分以外の全員が新しい宇宙ステーションの場所を見られるようにしたい場合、ローカル リポジトリの現在の状態を Bitbucket にプッシュすることで実現できます。

この図は、中央リポジトリにはない変更がローカルリポジトリにあり、これらの変更を Bitbucket にプッシュするときに何が起こるかを示しています。

プッシュが行われたときに何が起こるかを示す図

  リモート リポジトリに変更をプッシュする方法は次のとおりです。

  1. ターミナル ウィンドウのリポジトリ ディレクトリで「git push origin master」と入力して変更をプッシュします。次のような結果が返されます。

    1 2 3 4 5 6 7 8 $ git push origin master Counting objects: 3, done. Delta compression using up to 8 threads. Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 401 bytes | 0 bytes/s, done. Total 3 (delta 0), reused 0 (delta 0) To https://emmap1@bitbucket.org/emmap1/bitbucketstationlocations.git fcbeeb0..e3b7732 master -> master

2. Bitbucket リポジトリの [概要] ページをクリックすると、[最近のアクティビティ] ストリームにプッシュが表示されていることがわかります。

3. [コミット] をクリックすると、ローカル システムで行ったコミットを確認できます。変更では、ローカル システムと同じコミット ID が保持されます。また、コミット リストの左の行には直接のパスがあり、ブランチは表示されません。これは、future-plans ブランチがリモート リポジトリで操作されたことがなく、私たちが作成し、コミットした変更のみがあるためです。

4. [ブランチ] をクリックすると、ページのいずれのブランチにもレコードがないことがわかります。

5. [ソース] をクリックしてから、stationlocations ファイルをクリックします。
ファイルに対する最後の変更に、先ほどプッシュしたコミット ID があることがわかります。
6. このファイルでコミットされた変更を確認するには、ファイル履歴リストをクリックします。次の図のようになります。

プッシュ後のブランチ履歴を表示する画像

完了です!

ここまで来たら、ちょっと休憩です。落ち着いたら「チームメイトのリポジトリの更新」を必ずご確認ください。

 学習したすべての Git コマンドを覚える自信がなくても、問題はありません。「Git コマンド」ページをブックマークしておくことをお勧めします。

 

その他のヘルプ