As rookie

ルーキーインフラエンジニアがインフラのこと以外も結構書いてしまうブログ

learnGitBranchingでgitのブランチ操作を学んでみてる

こんにちは

最近知り合いに「gitの事で質問あるんだけど」って言われてまともに答えれなかった。

エンジニアなら知ってて当然レベル?のことを雰囲気で行っているのはまずいってことで、薦められた 「 learnGItBranching 」でブランチの操作に慣れようとしています。

k.swd.cc

こんなに良いものがあるなんて知らなかった。まだ全部はやってないですけど。

これは 問題形式になっていて、ツリー構造のゴールがあってそれに合うように git branch やら git rebase をするというものです。

最初にそれぞれのコマンドがどういう操作をするものかを説明され、webのコンソールっぽい画面でコマンドを実行し、最終的に「あなたは◯回コマンドを実行しました模範回答では◯回です。」というメッセージが表示されます。

この中でどうしても模範回答通りの回数にならないものがあってなんだかなぁってなってました。

その問題が「次のレベルに進もう」の3問目です。

演習自体は コミットの相対的な指定 ってだけなんですが、

模範回答が3回のところ、4回になってしまうのです。

その4回の時のコマンド

# 4回の時のコマンド
git checkout master
git branch -f master C6
git branch -f bugFix bugFix~3
git checkout HEAD~3

最初のmasterへのcheckoutが無駄な気がするな〜ってのはわかってるんですが何故か自分の中でそのコマンドを抜くことができなかった。それは何故か

おそらくHEADの認識がおかしかったのだ

www.backlog.jp

HEADとは、現在使用しているブランチの先頭を表す名前です。デフォルトではmasterの先頭を表しています。HEADが移動することで、使用するブランチが変更されます。

だが

Git - ブランチとは

Gitは、あなたが今どのブランチで作業しているのかをどうやって知るのでしょうか? それを保持する特別なポインタが HEAD と呼ばれるものです。これは、SubversionCVS といった他の VCS における HEAD の概念とはかなり違うものであることに注意しましょう。Git では、HEAD はあなたが作業しているローカルブランチへのポインタとなります。

この認識をもってたかった!!

結果

git branch -f master C6
git branch -f bugFix bugFix~3
git checkout HEAD~3

これでいけた。

HEADの認識関係なくてbranchコマンドを知らないだけだったのかもしれませんが、自分の頭の中で

逆説的に

branchの先頭(操作する対象)とHEADは同じ場所じゃないとだめでしょ

ってなってたんだと思います。

これからもgitの操作になれて開発効率やコードの保守性をあげていきたいとおもいます!