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

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

A branch represents an independent line of development for your repository. Think of it as a brand-new working directory, staging area, and project history. Before you create any new branches, you automatically start out with the main branch. For a visual example, this diagram shows the  master  branch and the other branch with a bug fix update.

Bitbucket Cloud におけるブランチ

Branches are most powerful when you're working on a team. You can work on your own part of a project from your own branch, pulling updates from  master  if necessary, and then you'll merge all your work into  master  when you're ready.  Our documentation  includes more explanation of why you would want to use branches.

ステップ 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'

The git checkout command works hand in hand with git branch . Because you are creating a branch to work on something new, every time you create a new branch (with git branch), you want to make sure to check it out (with  git checkout ) if you're going to use it. Now that you’ve checked out the new branch, your Git workflow looks something like this:

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

4. Search for the bitbucketstationlocations folder on your local system and open it. You will notice there are no extra files or folders in the directory as a result of the new branch.

5. Open the stationlocations file using a text editor.
6. Make a change to the file by adding another station location:

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. Save and close the file.
8. Enter git status in the terminal window. You will see something like this:  

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")

Notice the  On branch future-plans line? If you entered git status previously, the line was On branch master because you only had the one master branch. Before you stage or commit a change, always check this line to make sure the branch where you want to add the change is checked out.

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

1 $ git add stationlocations

10. Enter the git commit command in the terminal window, as shown with the following:

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

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

Now it's time to merge the change that you just made back into the master branch.

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

Your space station is growing, and it's time for the opening ceremony of your Mars location. Now that your future plans are becoming a reality, you can merge your future-plans branch into the main branch on your local system.

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. Enter the git status command to be sure you have all your changes committed and find out what branch you have checked out.

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

3. Switch to the master branch.

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

4. Merge changes from the future-plans branch into the master branch.  It will look something like this:

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

You've essentially moved the pointer for the master branch forward to the current head and your repository looks something like this:

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

5. Because you don't plan on using  future-plans anymore, you can delete the branch.

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

When you delete future-plans, you can still access the branch from master using a commit id. For example, if you want to undo the changes added from future-plans, use the commit id you just received to go back to that branch.

6. Enter git status to see the results of your merge, which show that your local repository is one ahead of your remote repository. It will look something like this:

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. From the repository directory in your terminal window,  enter git push origin master to push the changes. It will result in something like this:

    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. Click Commits and you can see the commit you made on your local system. Notice that the change keeps the same commit id as it had on your local system. You can also see that the line to the left of the commits list has a straight-forward path and shows no branches. That’s because the future-plans branch never interacted with the remote repository, only the change we created and committed.

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

5. Click Source, and then click the stationlocations file.
You can see the last change to the file has the commit id you just pushed.
6. Click the file history list to see the changes committed for this file, which will look similar to the following figure.

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

完了です!

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

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

 

その他のヘルプ