Git講座 その3

3レッスンの0が完了(0%)。

ブランチ操作、マージ、コンフリクト解決

ブランチの操作

このレッスンへのアクセス権がありません

コース内容にアクセスするには、登録またはサインインしてください。

ブランチの設定

  • demoAブランチとdemoBブランチを作成
  • それぞれのブランチ毎にコミットをすすめる
  • ブランチはいくつでも作成可能
  • どれか一つのブランチのみに切り替えができる
  • 「いま自分はなにブランチにいるのか?」が大事

ブランチについてご紹介します。ブランチは、その名のとおり「枝分かれ」という形ですね。元々あったのからバキッと別れて、更にバキッと別れる、という形になりますので、この枝分かれ、ちょっと手でやるとよく分かりませんが(笑)、そのことについてご紹介してきます。画面を共有します。

はい、あの「Git といえばブランチ」というようなイメージをされてる方も多いかと思います。そうですね。ブランチっていうのは元々の最初は master ブランチというところから始まります。今までコミット頂いたのは、ずっと master ブランチで作業していたということになります。

ブランチを作る

で、今回はそこから枝分かれして分かりやすくなるように、二つのブランチ「demoA」と「demoB」 というブランチを作って、それぞれでコミットを進めていきたいと思います。そうすることで枝分かれしますね。

そして、これらを後から合体させるのを「マージ」と言ったりしますけども、まずはこのブランチを作る、そしてブランチを切り替える、という操作からやっていきたいと思います。では、SourceTreeで作業を行っていきましょう。

リポジトリはクリーンな状態で

はい、ではSourceTreeです。今一番上の状態でmasterの所にいます。

ここで一つポイントなんですが、まずこの時点で「Uncommitted changes」、要はそのリポジトリへの変更がない状態にしておいてください。あの基本的に Git っていうのは、そのコミットの終わった状態で、変更がない状態を常に保つと、分かりやすく作業ができます。

その変更がある状態、宙ぶらりんでコミットされてないものがあればあるほど、なんだかよく分からない状態になりますので、基本的には、そのコミットの後で変更がない状態、クリーンな状態って言いますけども、そのリポジトリ内をクリーンな状態に保つようにしておきましょう、はい。

ブランチ demoA を作る

では、ブランチを作ります。今こちら(master)にいます。

そこからブランチを作る場合には、このブランチのアイコンをクリックしますね。一応、右クリックから、ここからブランチというのも出来ますけども、これですね、今回はこのボタンから行います。

ブランチをクリックします。そうすると「新規ブランチ」となって、新規のブランチ名を決めましょう、ということになります。ブランチ名は任意に設定いただくことが可能です。

今回は「demoA」、demoで大文字の A ですね、としました。「(新規)ブランチをチェックアウト」という風になってます。これは、このチェックがついていると「ブランチdemoAを作って、その後ブランチ「demoA」に切り替えます」という意味になります。このままやって行きましょう。はい、そうすると、今、注目はまずこちらですね。master ブランチの他に demoA ブランチというのが追加されたのが分かります。これがブランチが追加された状態ですね。今、master と同じ所にブランチ「demoA」が追加されたという風にご理解ください。

そして、こちら(SourceTreeの左サイドバー)を見てみると、ブランチが二つになっていて、太文字で〇が付いてる方「demoA」が〇が付いてますね。今は「master とブランチした、枝分かれさせた demoA の方にいますよ」という状態になります。

まず、この「今、自分はブランチのどこにいるのか?」っていうのが状態として分けられるという事について理解しておいてください。

より分かりやすくする為に、 demoA でコミットしたいと思います。今回は、この demoA の時に新しくファイルを作って…demoA.txt ですかね、というものを作ります。

demoAのテキストです。

ていうふうにして、ここで保存をします。これは「demoA ブランチに切り替えてから demoA.txt を追加した状態」ですね。

はい。ではSourceTreeに戻ってみます。

当然 Uncommitted changes と出て、ここに内容が出ます。ということで、これをステージに上げてコミットします。demoA でのコミットという風にしておきましょう。こんな感じですね。「demoA でのコミット」ということで、これでコミットします。

はい、そうすると、今度、また注目してください、こちら(ブランチのアイコン)ですね。master は何も触ってないので進んでいません。そして demoA ブランチだけが上に一個追加されて、demoA が移動しているのわかります。要は master ブランチから demoA ブランチが同じとこで分離されて、その demoA ブランチだけが一個前に進んだ状態、という形になっています。はい。

ですので、この状態をフォルダー(※ ファインダー)で確認すると、今はここですね。ここにしましょうか、はい。「test」の中に demoA.txt というのがありますね。ここにちゃんと demoA.txt があります。でも、これをここで master ブランチに切り替えます。今 demoA に自分がいるんですけども、master ブランチをダブルクリックすると master ブランチに切り替わります。はい今こうすると、ここ(SourceTreeの左サイドバー)ですね。master が太文字になってmaster に〇がつきました。今、これで master ブランチに戻った状態ですので、フォルダ中身、リポジトリを見てみると、このように demoA.txt がなくなります。これ、凄くないですか?伝わります?

えーと、demoA ブランチには demoA.txt を追加したので…、もう一度やりますね。 demoA にダブルクリックして移動すると、ここでは demoA のブランチがあるので demoA.txt があると。でも、master ブランチに戻ると、ここには demoA.txt は無い、という状態になってるわけですね。この違いを、まずは理解してください。

そして、まだ、ちょっとイメージと違うのは、なんか枝分かれする絵になってほしいのに、ここ(グラフ)真っ直ぐになってるじゃないですか。ここで、もう一つ作業してみたいと思います。

ブランチ demoB を作る

もう一つ demoB ブランチを作って demoB ブランチでは demoB.txt を追加してみましょう。まずは、同じように master に一旦戻りましょうね。今、自分が master であることを確認して、その master から、要はdemoA に進んだんじゃなくて、こう → こう、のここじゃなくて(※ 手振りで枝分かれを表現)、master に戻ってからブランチをもう一個作ります。

ブランチをクリックして、今度は「demoB」とします。(demo)Bブランチを作りますね。ブランチは幾つでも、好きな名前で追加することが可能です。(新規)ブランチに demoB を入力したら「新規ブランチをチェックアウト」という事でブランチ作成をクリックします。

こうすると、またここですね。master と同じところから今度は demoB ブランチが出来上がりました。元々で言うと、master から demoA ブランチを作って、demoA ブランチは(コミットが)一個進みました。で、もう一度 master に戻って今度は demoB ブランチを作った、いう形ですね、はい。

demoB ブランチで作業しましょう。同様に、新規のファイルを追加して demoB.txt という形で、demoBのテキストを追加します。

demoB.txt

demoB.txt として保存しますね。はい、保存ができました。

じゃあ、どうなってるでしょうか?はい、良いですね。なんか、こう、枝分かれが見えます、見えますね~。今は master から分離した demoA はこっちの未来に行ったんですけど、demoB は別の未来に進んだので、ここで初めて枝分かれができたという形になります。

中身を見てみると、demoA は別に(demoBブランチでは) demoB.txt が追加されて、それを今、変更として出てますよ、という内容になります。

では、今 demoB ブランチにいることを確認して、demoB ブランチとしてコミットを行ってみましょう。ステージに上げて、コミットですね。demoB でのコミットという形で(コミットメッセージは)demoB ファイルの追加かな?今、何でしたっけ?「demoBでのコミット」ですね。大丈夫ですね。「demoBでのコミット」としてコミットします。はい。

こうすることで、今、master からdemoA、demoB が出来上がったという形になります。

ブランチ間の行き来

じゃあ、ここで、ブランチ間を色々と行き来してみましょう。

今は demoB なので demoB.txt がありますよと。そして demoA にダブルクリックするとdemoA に切り替わるので、フォルダの中身は瞬時に demoA ブランチ側になって、demoB.txt が消えて demoA.txt が復活します。凄いですよね。そして、master に切り替えると、master は何もしてないので、master はdemoA.txt も demoB.txt もない状態になる、という形です。

これが、ブランチの素晴らしいところです。要は、複数人の人が同時に作業をする場合に、同じファイルを触ってしまったり、もしブランチがない場合には、コミットが一人の人がしたら「その次の人はどこにコミットするの?」みたいになるんですけども、一旦バラバラに、みんなブランチを分けて作業を進めれば、誰にも干渉する事なく、その人ごと、もしくは、その課題ごとで、コミットが分けて実施することができると、いうことになるわけですね。これが「分散型のバージョン管理」と呼ばれる所以です。「みんながバラバラでやってても、それぞれバラバラの所で好きなようにコミットがどんどん進められる状態」という形になります。

そして、このブランチを分けてから、今度はブランチをまた一つに揃えて合体させていく、これを「マージ」といいますが、それは次回のコースでご連絡するとして、まずは、この demoA ブランチと demoB ブランチに分けて、それぞれにコミットをし、そのコミットごとにファイルが増えたり減ったりする。で、ブランチを切り替えることでそのフォルダ / リポジトリの中身が変わる事、そして、ブランチは「自分が今、何ブランチか?」という事をちゃんと理解して、それを切り替えた上でコミットしていく…という内容について、それぞれ理解しながら、作業を進めていただければと思います。

ばーっと喋ってるので、ちょっと難しいかもしれません。あの、ブランチを色々と切り替えていただいたり、新たに、例えば demoC というとブランチを追加してみていただいたりしてですね、色んな事をしてブランチというものの操作に慣れていただければと思います。