Git ブランチを使用してファイルをマージする
宇宙ステーションの管理者になるには、特定の責任が伴います。太陽系の新しい場所のマップを作成する場合など、情報をロックダウンする必要があることがあります。ブランチについて学習することで、ファイルをメイン ソースと独立して更新し、準備が整った場合にのみ変更を共有できるようになります。
ブランチは、リポジトリでの開発作業の独立したラインを表します。まったく新しい作業ディレクトリ、ステージング領域、プロジェクト履歴のようなものと考えてください。新しいブランチを作成する前は、自動的にメイン ブランチ (master
ブランチ) から開始します。この図では、master
ブランチと、バグ修正のアップデートを含む他のブランチの例です。
ブランチは、チームで作業する際に最も力を発揮します。自分のブランチで、プロジェクトの担当部分で作業し、必要に応じて master
から更新をプルしした後、準備が整ったらすべての作業を master
にマージできます。アトラシアンのドキュメントでは、ブランチを使用する理由についてさらに説明しています。アトラシアンのドキュメントでは、ブランチを使用する理由についてさらに説明しています。
ステップ1. ブランチを作成して変更する
宇宙ステーションの今後の計画を追加するための、コミット準備中のブランチを作成します。計画を全員に伝える準備が整ったら、Bitbucket リポジトリに変更をマージし、不要になったブランチは削除できます。
ブランチはコミットに対するポインタであることを理解しておくことが重要です。ブランチを作成すると、Git は新しいポインタを作成します。一連の新しいファイルやフォルダを作成するわけではありません。手順を開始する前のリポジトリは、次のようになります。
ブランチを作成するには、以下を実行します。
ターミナル ウィンドウを開き、次のコマンドを使用してローカル リポジトリの最上位に移動します。
macOS / Linux / Git Bash
$ cd ~/repos/bitbucketstationlocations/
Windows コマンド プロンプト
$ cd repos\bitbucketstationlocations\
ターミナル ウィンドウからブランチを作成します。
$ git branch future-plans
このコマンドでブランチが作成されますが、そのブランチに切り替えられるわけではありません。そのため、リポジトリは次のようになります。
リポジトリ履歴は変更されず、現在のブランチへの新しいポインタのみが追加されます。新しいブランチでの作業を開始するには、使用したいブランチをチェック アウトする必要があります。
先ほど作成した新しいブランチをチェックアウトして、使い始めます。
$ git checkout future-plans
Switched to branch 'future-plans'git checkout
コマンドはgit branch
と連携して機能します。新しい作業を行うためにブランチを作成するため、git branch
を使用して新しいブランチを作成するたびにgit checkout
を使用してそれをチェック アウトします。新しいブランチをチェック アウトすると、Git ワークフローは次のようになります。- ローカル システムで
bitbucketstationlocations
フォルダを検索して開きます。新しいブランチを作成したことにより、ディレクトリに新しいファイルやフォルダは追加されていないことがわかります。 - テキスト エディタで
stationlocations
ファイルを開きます。
別のステーションの場所を追加してファイルを変更します。
<p>Bitbucket には次の宇宙ステーションがあります:</p> <p> <b>地球の月</b><br> 本部 </p> <p>
<b>Mars</b><br>
レクリエーション部門
</p>
- ファイルを保存して閉じます。
ターミナル ウィンドウに「
git status
」と入力します。次のように表示されるはずです。$ 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
でした。変更をステージングまたはコミットする前に必ずこの行を確認し、変更を追加するブランチがチェック アウトしたものであるかどうかを確認するようにします。
ファイルをステージングします。
$ git add stationlocations
以下のように、ターミナル ウィンドウに「
git commit
」コマンドを入力します。$ git commit -m 'making a change in a branch'
[future-plans e3b7732] making a change in a branch
1 file changed, 4 insertions(+)このコミットで、リポジトリは次のようになります。
ここで、
master
ブランチに加えた変更をマージします。
ステップ2. ブランチのマージ: fast-forward マージ
宇宙ステーションは成長を続けており、火星の拠点で開会式を行うときがやってきました。今後の計画が現実のものとなったため、future-plans
ブランチをローカル システムの main ブランチにマージできます。
1 つのブランチのみを作成して 1 つの変更を加えたため、fast-forward ブランチ方式でマージを行います。ターゲット ブランチに対して現在のブランチの先頭が線形のパスになっているため、fast-forward マージを実行できます。ブランチを実際にマージする代わりに、Git は現在のブランチの先頭をターゲット ブランチの先頭に移動して (fast-foward (早送り) する)、履歴を統合します。これによって、ターゲット ブランチからアクセス可能なすべてのコミットが現在のブランチで利用できるようになるため、履歴を効果的に組み合わせることができます。
このブランチ ワークフローは小さな変更を伴う短期間のトピック ブランチに共通しており、長期間実行されているような機能では一般的ではありません。
fast-forward マージを完了させるには、次の手順を行います。
ターミナル ウィンドウを開き、ローカル リポジトリの最上位に進みます。
macOS / Linux / Git Bash
$ cd ~/repos/bitbucketstationlocations/
Windows コマンド プロンプト
$ cd repos\bitbucketstationlocations\
「
git status
」コマンドを入力して、すべての変更がコミットされたことと、チェック アウトしたブランチを確認します。$ git status
On branch future-plans
nothing to commit, working directory cleanmaster
ブランチに切り替えます。$ git checkout master
Switched to branch 'master'
Your branch is up-to-date with 'origin/master'.future-plans
ブランチの変更をmaster
ブランチにマージします。 次のようになります。
$ git merge future-plans
Updating fcbeeb0..e3b7732
Fast-forward
stationlocations | 4 ++++
1 file changed, 4 insertions(+)これで、
master
ブランチのポインタを現在の先頭に移動させました。リポジトリは次のようになります。
future-plans
を今後使用する予定はないため、ブランチを削除できます。$ git branch -d future-plans
Deleted branch future-plans (was e3b7732).future-plans
を削除しても、コミット ID を使用してmaster
からブランチに引き続きアクセスできます。たとえば、future-plans
に追加した変更を元に戻したい場合は、受け取ったばかりのコミット ID を使用してそのブランチに戻ります。
「
git status
」と入力してマージの結果を確認します。リモート リポジトリの 1 つ先にローカル リポジトリが表示されます。
次のようになります。$ 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 にプッシュした時に何が起こるかを示しています 。
リモート リポジトリに変更をプッシュする方法は次のとおりです。
ターミナル ウィンドウのリポジトリ ディレクトリで、「
git push origin master
」と入力して変更をプッシュします。次のような結果になります。$ 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 -> masterBitbucket リポジトリの概要ページをクリックすると、最近のアクティビティストリームにプッシュが表示されます。
- [コミット] をクリックすると、ローカル システムで行ったコミットを確認できます。変更は、ローカル システムのものと同じコミット ID を保持します。
コミット一覧の左側の行には、直接的なパスのみが表示され、ブランチは表示されません。これは、future-plans
ブランチはリモート リポジトリとやり取りしたことがなく、ユーザーが作成およびコミットした変更のみがやり取りの対象となっているためです。 - ブランチ をクリックすると、ページのいずれのブランチにもレコードがないことがわかります。
- [ソース] をクリックしてから、
stationlocations
ファイルをクリックします。
ファイルに対する最後の変更に、先ほどプッシュしたコミット ID があることがわかります。
- このファイルでコミットされた変更を確認するには、ファイル履歴リストをクリックします。次の図のようになります。
完了です!
ここで少し休憩を取りましょう。次に、「チームメイトのリポジトリの更新」をご覧ください。
Not sure you will be able to remember all the Git commands you just learned? No problem. Bookmark our Git commands page so that you can refer to it when needed.