VS Codeでソースコード管理:ブランチを操作してみよう:Visual Studio Codeで快適Pythonライフ
VS Codeが提供するGitサポート機能を使って、ブランチを作成したり、ブランチをマージしたり、コンフリクトを解決したりする手順を紹介します。
前回はVisual Studio Code(以下、VS Code)のソース管理機能の初歩の初歩として、リポジトリの初期化からファイルのコミットまでを見ました。今回は、ブランチの作成とマージ、コンフリクトの解決をVS Codeで行う方法を見ていきましょう。
ブランチの作成
「ブランチ」はGitの大きな特徴の一つです。これを使って、日々のコード記述の流れを管理できます。
VS Codeの[ソース管理]ビューの[リポジトリを初期化する]ボタンをクリックすれば、「master」あるいは「main」などのブランチが作成されます*1。このブランチは、プロジェクト全体を通してメインとなるブランチであり、そのプロジェクトの成果物が常に安定して動くように維持していきます。新機能の追加やバグフィックスなどの作業はメインブランチから別のブランチを派生させて、そこで行うことが一般的です。それらの作業で書かれたコードが問題なく動くことが確認できたら、コードをメインブランチ(あるいは開発用のブランチなど)に「マージ」して、そのブランチを削除して、今度はまた別のブランチを作成して……といった具合に開発は進められます。
*1 Gitではリポジトリを初期化した際に作成されるデフォルトのブランチの名前は特に構成を行っていないと「master」となりますが、バージョン2.28からデフォルトブランチの名前を変更できるようになっています。例えば、デフォルトブランチ名を「main」にするには、コマンドラインから「git init --global init.defaultBranch main」コマンドを実行します。
本稿ではVS CodeのUIやターミナルを使って、ブランチを操作してみることにしましょう。以下は新規にフォルダを作成して、[ソース管理]ビューにある[リポジトリを初期化する]ボタンをクリックしたところです(上の脚注で述べたようにしてデフォルトのブランチ名を「main」に変更してあります)。
ここではmainブランチにREADME.mdファイルを作成して(中身は取りあえず空で構いません)、コミットしておきましょう。
次にmainブランチから新たに「utility」という名前のブランチを作成します。このブランチでは、hello関数とgoodbye関数の2つの関数をmyutil.pyファイルに記述する予定です。ブランチを新規に作成するには、コマンドパレットに「git create branch」などと入力して[Git: 分岐の作成](Git: Create Branch)コマンドを実行します。
これにより、コマンドパレットにはブランチ名を入力するボックスが表示されるので、ここでは「utility」と入力しましょう。
これで「utility」というブランチが作成されて、そのブランチに移動(チェックアウト)します(実際には「git checkout -b utility」コマンドに相当する操作が行われています)。ステータスバーの左端に表示されているブランチが「utility」になっていることに注目してください。また、コミットメッセージを入力する欄からもこれがutilityブランチであることも分かります。
これで初めてのブランチが作成できました。次にこのブランチで先ほど述べたように、myutil.pyファイルを作成して、そこに2つの関数を記述してみます。
ブランチのマージ
では、[エクスプローラー]ビューでmyutil.pyファイルを作成して、まずはhello関数を記述しましょう。コード自体に深い意味はもちろんありません。
def hello():
print('hello')
hello関数を記述したら、[ソース管理]ビューで[+]ボタンをクリックして、myutil.pyファイルをステージングして、「def myutil.hello function」などのメッセージと共にコミットします。
本来はここで単体テストなどを実行してコードの振る舞いが正しいかどうかを確認すべきですが、ここでは省略し、コードが正しいものとしてmainブランチにマージをしてみましょう。mainブランチは基本的には常に正しく動作するコードだけを集めたブランチとなります。
utilityブランチのコードをmainブランチにマージするには、まずmainブランチに移動する必要があります。これにはコマンドパレットに「git checkout」などと入力して[Git: チェックアウト先](Git: Checkout to)コマンドを実行します。
すると、以下のような選択肢が表示されます。
このダイアログでは、新規にブランチを作成してそこに移動する[新しい分岐の作成]、指定したブランチから新規にブランチを作成してそこに移動する[新しい分岐の作成元]、既存のブランチにデタッチモードで移動する[チェックアウトがデタッチされました](英語の選択肢は[Checkout detached]です)*2、既存のブランチやタグ(ここでは[main]と[utility]の2つ)が表示されます。この操作に対応するのは「git checkout」コマンドです。
*2 既存のブランチにデタッチモードで移動するというのは、移動先のブランチで何らかの機能やコードを実験的に記述することを目的としたものです(これらは別のブランチに移動した時点で消えてなくなってしまうので、保存が必要であれば、それらのコードを含んだブランチを新規に作成するなどの対処が必要です)。
ここではmainブランチにutilityブランチの内容をマージするので[main]を選択してください。mainブランチに戻って[エクスプローラー]ビューを見ると、myutil.pyファイルがないことに気付くはずです。utilityブランチに移動してから、このファイルを作成して、コードを記述したので、mainブランチにはないのが当たり前です。エディタ領域でもmyutil.pyファイルが「削除済み」となっています。
マージを実行するには、コマンドパレットで「git merge」などと入力して[Git: ブランチをマージ](Git: Merge Branch)コマンドを実行します。
すると、マージ元のブランチ(現在のブランチにマージしたいブランチ)を選択するダイアログが表示されるので、ここでは[utility]を選択してください。
utilityブランチで行われた作業がmainブランチにマージされました。[エクスプローラー]ビューにmyutil.pyファイルが作成され、エディタ領域にあるmyutil.pyファイルのタブでも「削除済み」というコメントがなくなりました。
全てがこのようにうまくいけばよいのですが、そうとも限りません。
コンフリクトの解決
Copyright© Digital Advantage Corp. All Rights Reserved.