Git
ポエム
バージョン管理
新人プログラマ応援
Qiita詩人同盟

もし、異世界転生モノのチートスキルが「Gitコマンド」だったら【その1】

car_truck.png

この記事のゴール

以下についてざっくり理解することができる(かもしれません)。

  • commitとはなにか
  • checkoutとはなにか

本編

僕「好きです。付き合ってください!」

帰り道、僕は勇気をふりしぼって先輩にそう伝えた。

先輩はちょっと驚いた顔をした。

そのまま笑って、何かをつぶやく。

ーー僕は、横から突然やってきた暴走トラックに跳ねられたので、何も聞けなかった。

気がつくと、森の中にいた。

僕「ここは一体…?」

薄暗い森の中

僕「そうか、僕、あの時…」

死んだのだ。

頭に霞がかかったかのようだ。思考がまとまらない。

しかし、僕はここが異世界なのだと、何故か瞬時に分かった

周りを見渡すと、少しはなれたところに男が立っている。

フラフラとしたおぼつかない足取り。虚ろな瞳。痩けた頬。

明らかに憔悴しきっている。

男は虚空をしばらく見つめていた。

……そして振り絞るような声で、こうつぶやいた。

git checkout 5d417427edb1af2687f0d388fe7c8b04cfd559b7

とたん、男はまばゆい光に包まれ、消えた。

???「また、行ったのね」

背後から女性の声がした。

女性「こりない人」

そういってため息を付いた。身なりは「よくある女神的な」格好をしている。

その人は整った顔をしている。しかし女神とは程遠いやさぐれた表情をしていた。

女性「あら。あなたいつ来たの?」

僕「さっき…」

僕「あの、先程の、男性は?」

女性「ああ。あれね」

女性「あれは、ターニングコミットcheckoutしたのよ」

僕「ターニングコミット?」

ターニングコミット。checkout。どちらも聞いたことない言葉。

呆けた僕の顔を一瞥し、女性は続けた。

女性「人生は選択に満ちているわ」

女性「そして、選択のたびに人は、コミットするの」

Untitled(13).png

女性「今の自分は、今までの自分のコミットの積み重ねで出来てる」

女性「その中でも、今後の選択に大きな影響を与えるコミットがあるの」

女性「それが、ターニングコミット。つまり、『人生における重要な選択の時』

Untitled(13) (1).png

女性「そして、この世界はね」

女性「選択に失敗した人たちのための、救済の世界」

女性「ターニングコミットに戻って、やり直すことができるの」

僕「やり直す。。。」

女性「まずはターニングコミットにcheckoutして、ブランチを切る」

Untitled(13) (2).png

女性「ブランチでしばらくコミットして、うまくいったらあなたの本当の人生に戻れる」

女性「つまり、マージできるの」

Untitled(13) (3).png

女性は僕の方に体を向けた。

手には小さな羊皮紙。そしてこう続けた。

女性「あなたのターニングコミットはいつ?」

羊皮紙を僕に手渡した。

女性「強く、強く念じるのよ」

僕は思い出す。

やり直したかった。行きたかった。

僕が死なない世界。僕が先輩の答えを聞ける世界。

あの日の放課後、あの時あの場所にいかなければ、僕は。

きっと、先輩の答えを聞けていただろう。

目をギュッとつぶって念じる。

チリチリという音。羊皮紙の焼け焦げる匂い。

女性「……出たわね」

目を開けると、羊皮紙には焼け焦げた文字。

9e417427edc1cd2687f0d311fe7c8b04cfd559b7

女性「これがあなたの、ターニングコミットハッシュよ」

女性「大事になさい」

女性「良いマージができることを祈っているわ」

そういって女性は森の奥に消えていった。

やり直せる……。

やり直せるんだ。

羊皮紙を握りしめる。

僕は、震える声で、つぶやいた。

git checkout 9e417427edc1cd2687f0d311fe7c8b04cfd559b7

(つづく)

解説

コミットとはなにか

コミットとは「セーブデータ」です。

thumbnail

(イメージ)

ただし、普通のRPGのセーブデータとは大きく異なる点があります。

「上書き保存か」「上書き保存でないか」

「以前のデータに戻れないか」「戻れるか」

という点です。

saveの場合

thumbnail

同じデータに保存しようとすると、上書き保存することになるので、

上書き保存したあとは前のデータに戻ることができません。

commitの場合

それに対し、commitは上書き保存ではなく、

写真をとるようなイメージです。

thumbnail

上図のように、冒険の書v0.1がすでにコミットされている状態だとします。

冒険の書0.2のファイルをコミット(写真をとる)すると、

thumbnail

冒険の書v0.2の写真がコミットとしてのこります。

重要なのは、

冒険の書v0.1のデータも残っているということです。

残っているので、あとから冒険の書v0.1に戻ることができます

このような仕組みにより、

今までコミットしたところに戻ることができるのです。

まとめた図

thumbnail

戻れるか、戻れないかというところが特に重要になります。

どうやってターニングコミットに戻っているのか

先程少し触れたように、

Gitでバージョン管理すると、今までcommitしたすべての地点へ戻ることができます。

その時に使うコマンドが

git checkout コミットハッシュ

です。

コミットハッシュは、git logしたときに出てくる

commit 5d417427edb1af2687f0d388fe7c8b04cfd559b7

これです。コミットに対して一意に生成されます。

「僕」はコミットハッシュに「ターニングコミットハッシュ」を用いて、

自身のターニングポイントに戻ろうとしているわけです。

git checkoutとブランチの切り替えについて

ここで気になってくるのが、

git checkout develop

とか

git checkout master

とか、

ブランチの切り替えにも「checkout」が使われるという点です。

「git checkout ブランチ名」は、ブランチの移動である。

これは半分合っていて、半分間違っています。

あくまでも、

「git checkout は特定コミットへの移動」

なのです。

以下の図を見てみましょう。

thumbnail

例えば、上記の図のようにコミットが並んでいて、

現在C5コミットにいるとします。

実は、developブランチは枝そのものではなく、

C7コミットについた別名です。

C7コミットの別名ですので、

git checkout C7
git checkout develop

のどちらでも、コミットの移動をすることができるのです。

thumbnail

ブランチは

「その枝の最新コミットの別名」

なのです。

commitについてもう少し詳しく

手前味噌で恐縮ですが、以前作ったスライド資料をご参考にしていただければと思います。

thumbnail

commitとsaveを比較してみる

まとめ1

  • Gitでバージョン管理すると、commitした時点に戻れる

  • 呪文は「git checkout」

  • branchはその枝の最新commitの別名

まとめ2

あなたの「ターニングコミット」はいつですか?