RPGでボスを倒しながらGitを学べば魔王も倒せる Fork(Gitクライアント) commit branch merge

# 概要

* macOS BigSur 11.4
* Fork Ver 2.7

この記事で解説するのは以下の三つ

・`commit` コミット（保存）
・`branch` ブランチ (分岐)
・`merge` マージ (統合)

また、GitクライアントのForkのスクリーンショットを使用して解説します
Gitの導入やForkのインストール、アカウント連携などは解説しません

あくまでツール上でやりたいことがわかるように解説することが目的なので
現実的にありえないシチュエーションが発生する場合があります

下のよくみるやつは登場しません

```
$ hogehoge
```

# 対象の勇者

バージョン管理って言葉は一応聞いたことあるよ！
でもなんか用語が多くて難しそうだし使うの怖いな
俺は言葉じゃなくてツールの使い方で理解したいんだ！

っていう感じの勇者の皆様

記事を読んだベテラン勇者も認識が間違ってる部分があったらぜひマサカリ魔法お願いします

# 登場人物

* 勇者(常に独り言を言う）
* 女神(かしこい)

# Lv1. ボスの前に着いた！まずはセーブ！ `commit`

教会に呼ばれてなんやかんやあって小遣いをもらって魔王討伐することになった勇者ワイ

街の近くの魔物を倒し少しだけレベルが上がったので
何となく悪い感じのボスを倒しに行くことになった

「ボスの部屋の前についたで」
「教会からもらったFork？っていうツールでセーブするんやったかな？」

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613274/fafa3b35-4370-95d5-be8d-52685652e807.png)

「これで`commit`ボタンを押せばセーブ完了ってことやな」

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613274/4e3d85af-e28e-c09e-719d-4d066b3e1605.png)

「よし、ワイは天才や」
「サクッとボスを倒してこの街でも救ったろう」

...

「普通にボコボコにされたで…」
「レベルも装備もなんもかんも足らんかったんや…」

#　Lv2. レベルもあげたいし装備も揃えたい `branch`

ボスとの格差に嘆く勇者
しかし勇者はPDCAサイクルを回すのに長けたものだったので次の手を打つことになった

「やりたいことはシンプルや、レベルを上げて装備を整える」
「しかしワイ一人では時間がかかってしまう」
「そういえば教会のやつらが`branch`がどーのこーの言ってたような…？」

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613274/04b13689-9a2f-d569-8aed-20ce72e5af06.png)

「みつけた」
「早速`branch`を作ってみるで」

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613274/040ffbb9-b327-f436-c5f6-5365d9c049ca.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613274/0036a5dc-45cd-856e-2a7d-cdf861a8aadc.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613274/b3bf22a8-0700-5ac6-bcfa-56679f2198ef.png)

「これでレベルを上げと装備を集めで並行作業をする準備が整ったで！」

「ワイはここで分身の術！ワイAとワイBに分身で生み出すで！！」

「真なるワイ(main)はワイAとワイBの`commit`を待つんや！」

## level_up ワイA

ワイAはレベル上げのために街の近場の程よいレベルの魔物が出る草原までやってきた
時間が程よく経過し、レベルも程よく上がっていた

「程よく疲れた〜、ホンマここは程よい草原や！」
「いったんここらで成果を確認してみるで」

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613274/e3dc956e-27d7-d3ec-0a6f-a2f28d60c39b.png)

「ドロップで程よい棒を拾えたのはナイスやった」
「このくらい上げてたらええやろ！前に習った通り`commit`ボタンを押してセーブや！」

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613274/091c1973-2692-2881-3084-3873f295cfbe.png)

「よし、これでセーブできたはずや！」
「ワイBはうまいことやってるやろか…」

## collect_equip ワイB

ワイBは装備を集めるために日雇いの仕事を見つけ資金を作り、街の装備屋へと向かった
装備屋の充実したラインナップに心をおどらせ、ワイBは無事に買い物を終えた

「いやーー、最近の装備屋はすごいで」
「特にソードは掘り出しものやったなぁ」

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613274/f13e4264-3d9a-830c-2e8a-b4c1ccd21302.png)

「稼いだ分を合わせても金は減ったけど、移動速度が早くなる靴も買えたし万々歳や！」
「セーブするで！」

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613274/0ac282b5-f20a-5a2e-6a6e-81bf8e07fc08.png)

「よっしゃ！これでセーブ完了や！」
「ワイAの驚く顔が目に浮かぶようや…！」

# Lv3. 分身解除　すなわち合流 `merge`

## 疑念

分身を放った真なる勇者ワイはワイA、ワイBがそれぞれも目標を達成したことを確認した
真なる勇者ワイは彼らの成果を受け取ろうと行動を開始する

「ワイは今ボス前でセーブしたところやな」

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613274/64936827-605a-a232-2106-8f9751450f46.png)

「まずはワイAの成果をもらうとするで！」
「ワイAの`commit`を選んで`merge into main` これか？」

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613274/23f9881f-e05c-fdd4-f437-2339b0223aa2.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613274/bdaa5661-6c29-4ab6-0b8b-200dca3a5ba0.png)

「確認が出てきたけど、よくわからんから`merge`や！」

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613274/01b379d5-6dc3-a6cd-d2b2-9901b4dba661.png)

「お、おおおお！たしかにレベルが上がってるで！！！」
「しかも程よい感じの棒もいつの間にか手に入ってる！！！」

「…？　あれ、ところでここはどこや？？」
「さっきまでボスの前にいたはずなのに、見渡す限りの程よい感じの草原に来てしもうてる…」

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613274/358a6645-00d4-36b9-977f-2c6fbe9d606c.png)

このとき、世界は崩壊寸前だった
混乱した真なる勇者ワイはそのことに気づくことはできなかった

## 衝突 `conflict`

ワイAのレベルアップを受け取った真なる勇者ワイ
レベルアップに喜び、見慣れぬ程よい棒に喜んだのも束の間
見ず知らずの場所に転移してしまっていた

「お、落ち着け」
「何が起きたかは知らないけど同じ手順でワイBの成果も`merge`や！」
「じっくり考えるのはその後や…」

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613274/c08075eb-d707-d6d0-5fa3-04a78d3493c3.png)

「さっきと表示が少し違う気もするけど…さっきも大丈夫だったしいけるで！」

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613274/8b30efac-8886-c8c6-71b1-4083e91156fe.png)

「Error…やと…」
「な…なにが起きたんや…」

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613274/1bbfdb29-de4d-e237-dac4-b17d9b6a8f3f.png)

「ワイには何がどうなってるのかもう…」
「`Merge Conflict`って書いてるけどなんなんやこれは！」

「うっ、意識が…」

## そして解決へ `resolve`

謎のエラー Conflict によって意識を失った勇者ワイ
いくばくかの時間が経過してようやく目覚めた勇者ワイは二度とGitなど使うものかと怒りにまみれていた

それもそのはず、勇者ワイのいた場所は謎の場所だった
さっきまで持っていたはずの装備も全て失っていた

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613274/20734ac3-7ee4-fab3-baf2-1a2f99f822c9.png)


全てを失ったと感じたその瞬間、謎の世界に光が差し込んだ

『勇者ワイよ、衝突`conflict`を解決`resolve`するのです』
「な、なんや！今度は何が起きてるんや！」

『落ち着いてください。極めて当たり前のことが発生しているだけです』
『私の言う通りに、焦らず対処するのです。まずは画面を見てください』

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613274/4a8c60a3-4061-b0f4-cbd5-78a38ef5a653.png)

『これはワイAの成果とワイBの成果が被ってしまったが故に起こりうる災害、衝突です』
『`Merge in Fork` というボタンを押してください』

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613274/abb1f231-f8f0-3fff-1805-473bc0b4b57d.png)

『レベル以外の部分が`conflict`していることが分かりますね？』
『あなたがすべきことは、この左と右の行のどちらを使うかを決めることです』

「そ、そんな事言われてもワイにはどうしたらいいのかわからないんや…」
「なにが正しいのか…」

『今回はふたつのうちどちらがより良いかを基準に選ぶのです』
『今必要なのは選ぶための技術です、何を選ぶべきかはその次に学ぶとよいでしょう』

「そ、それならいけそうや…」

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613274/8465f8e6-d84d-f515-b160-2d7c64105cdb.png)

「一行ずつ選択とか、ブロックごとに選択とか色々できて便利や！　割と簡単やぞ！」
『飲み込みが早いですね！それでは`resolve`しましょう！』

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613274/6206f7ec-0e31-6a59-deb7-44c5820ae8d1.png)

『解決が完了したら`commit`してどう解決したのかを保存します』
「これで、もとの場所に戻れるわけやな…」

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613274/db77b7be-c949-24b6-d744-f23b03269f2c.png)

「よっしゃ！金もある！装備も強い！これでこの前負けたあのボスなんてボコボコや！」
『それでは勇者ワイよ、あなたのGit人生に幸あらんことを』

こうして勇者ワイは見事ボスを倒し、街を救いました
めでたしめでたし

# 衝突がそもそも起こらないようにしましょう

教会の一室で映像水晶が発光が止んだ
勇者ワイはGit初心者の勇者に対する基本的な使いかたや注意点を解説するための講座を受けていた

『と、いうように`branch`を作って作業をするのは便利ですが、同時に`conflict`というリスクも発生します』
「妙にワイに似てるやつの映像が流れてて怖いなんてもんじゃないで…」
　
『あの勇者の失敗はなんだと思いますか？』
「まだよくわかってない機能を使おうとしたからじゃないんか？」

『それもあるかもしれませんが、今回の場合は明確です』
『任された仕事以外の変更も一緒に保存してしまったからです』

「まかされた仕事以外の変更…？」
『こちらをご覧ください』

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613274/1e842821-9aa8-34f4-d0c3-71eed74de867.png)

『レベル上げが目的にも関わらず、レベル以外の変更も保存している』
「でも、敵を倒したらドロップはするし、金だって落ちるんや。仕方ないんやないか？」

『対処法はきちんとあります』
『部分コミットです』

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613274/f2f239a4-279d-8686-5aa1-31327d633bf3.png)

『矢印をなぞるように範囲選択をすると』
「これは…！！」

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613274/bbf7454a-bdf8-af87-09a1-013acb4bcba6.png)

「そうか！変更がどれだけあっても好きな部分だけを保存できるんや！」
『その通りです。これを使って先程の流れを辿ってみましょう』

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613274/4140f901-5d97-4545-093e-cc0e5c97ff89.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613274/34dec7ae-14c9-90bd-4f88-669364be3ffb.png)

『上がったレベルと増えた装備品だけが保存されていますね』
『それでは`merge`してみます』

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613274/cc70443b-e0ec-4a80-c445-aa52e187b886.png)

「`conflict`が発生してない！！レベルと装備だけが変更されてるで！」
『これが理想の`branch`の使い方です』

『それでは以上で講座を終了にしたいと思います』
『勇者の皆さん、あなた達のGit人生に幸あらんことを』