みなさん今日もGitしてますか?
一人独学エンジニアとしてはなかなかgitに触れる機会がなく、ここ一年不安と戦いながらGitを使ってきました。
このブログを始めることで、記事ネタを書くために自分自身でも調査をして、擬似的にも「教える」という立場になることで少しずつそういった不安もなくなってきています。
初学者の人こそブログを書こう!そして友達になろうじゃないか!(Instagram、Xでお気軽にDMくださいね)
未コミットのままブランチを移動すると起きること
未コミットの変更内容がある状態でブランチを移動すると、移動したブランチ先にその変更内容が共有(そのまま持っていくイメージ)されます。
移動さきのブランチでコンフリクトが起きれば移動できずにエラーが出るのでセーフ。もしそのまま移動できてしまった時には全く別の作業内容が別のブランチに共有されるという事態になります。
落ち着いて元のブランチに戻る作業をしましょう
僕も例に漏れずですが、おそらくGitに慣れていない人はここで焦って直接元のブランチに戻ろうとすると思いますが、やめておきましょう。
なぜかって?
詳しいことは置いておいて「未コミットのままブランチを移動する」事がいけない事なんだから、今未コミットの変更内容があるのに元のブランチに戻るのもこれに該当するって事だけわかればOK。
ではどうするのか。
落ち着いてスタッシュするのが一番。Gitには変更内容をコミットせずに一時的に避難しておくための機能「git stash」が用意されています。
移動先のブランチで未コミットの変更内容を確認「git status」してから、スタッシュ「git stash」をして対比させてから元のブランチに戻ります。
これで安全に元のブランチに戻る事ができたので、そのあとは退避させていた変更内容を「git stash apply」で戻します。(stashが複数ある場合はgit stash apply stash@{0})などで指定してください。
僕の環境だとVSCodeでGit Graphを使っています。Git Graphでのスタッシュの方法、ブランチの移動方法については下記の記事を参考にしてください。
そもそもブランチの移動前にコミット(スタッシュ)する癖をつけよう
Gitを使ってチーム開発をしている人からしたら当たり前のことだと思いますが、初学者や普段一人で開発をしているとどうしてもコミット忘れをしてしまうことがあると思います。
フリーランスだと誘惑もたくさんあるので、作業の途中でお昼寝をしたり、ちょっと遊びに行ったり、リフレッシュのために散歩をしたり。
自分一人で作業をしていると、後でまだ作業をするからとコミットをせずにそのままにしてしまいがち。でも、そんな時にクライアントから別の作業を急ぎでお願いされると、ついついそのままブランチを移動してしまいます。
やっぱりコミットする癖をつけておいた方がいいんだと思いま・・・
と思ったらコミットにもしっかりルールを持った方がいい
未コミットのままブランチを移動しないようにするためには、もうとにかくコミットする癖をつけておけばいいのか。と思ったのですが、少し調べてみるとコミットするにもしっかりとルールを作っておいた方がいい模様。
https://qiita.com/suzuki-hoge/items/cc91877ce69527ced692
少し考えたら当たり前のことですね。
一人で作業しているとブランチを切ることもしなかったり、ブランチを切ってもプルリク作らずに直接マージしたりする事が多いと思います。
でも、作業者とレビュアーが違う開発環境のことを考えると、ブランチやコミットはしっかりとルールを持っておく事がとっても重要です。
最低限、「作業途中です。」的なコミットはダメ。どうしても作業途中にコミットが必要な時はスタッシュで対応するのがベター。
そもそも、機能単位がブランチで作業単位がコミットと考えた時、一つ一つのコミットが大きくなりすぎないように作業も分割して考えるのがいいのかもしれません。
この辺りは運用ルール次第だと思いますが、修正作業の時にページ単位でコミットすると行数が大きくなる場合はコミットを分けるのもいいのかも。
フロントにしてもバックにしても、今後もプログラミングで飯を食べてくとなったら、一人で開発を続けるのは無理だし、よほどの天才でない限り成長もしないはず・・・。
孤独なフリーランスエンジニアでも、(いや、だからこそ)仮装のチームを作って、自分で作業者になって自分でレビュアーの役割をしてみる事が大切ですね。
まとめ
独学フリーランスは勉強する場所がなかなかない。一人だとどうしても最新情報のキャッチアップが遅れてしまったり、苦手なものがずっと苦手意識を持ったままになってしまいます。
同じ悩みを持つ人、こんな独学フリーランスに優しく手を差し伸ばしてくれる人。よければ定期的なレビュー会?のようなものを行いつつ、趣味とかゲームとか共有できるグループ作りしましょー!