現役エンジニアがよく使うGitコマンド

どうもこんにちはkoheiです。
完全プライベートな話ですが、最近結婚式をしました。
やっと落ち着いてきたので、ブログぼちぼち書いていきたいと思います。
それでは本題、先日に下記のようなツイートをしました。
eclipseのEGITプラグインを使ってgit操作することが多かったけど、最近コマンドラインで操作したほうが早いことに気づきました。GUIより早いのは考えればわかるはずなんだけど、食わず嫌いでした。。やっぱり慣れると作業効率が違います(笑)
— こうへい@フリーランスエンジニア (@kohei72901660) January 12, 2020
eclipseのEGITプラグインを使ってgit操作することが多かったけど、最近コマンドラインで操作したほうが早いことに気づきました。GUIより早いのは考えればわかるはずなんだけど、食わず嫌いでした。。やっぱり慣れると作業効率が違います(笑)
というわけで、やはりGUI※1よりも早いことに今更ながら気づきました。(実感しました。)
今回は現役でバックエンドエンジニアとして働いている私がよく使うコマンドをまとめたいと思います。
なぜGUIベースで操作していたのか
この疑問について、少し考えてみました。
考えた結果、
頭を使わなくてもなんとなくでgitの操作ができるから
に尽きるかと思います。
この考え方は非常にまずいです。エンジニアとしての伸びしろポイントなのに自分で成長を阻害してました(笑)
ここ1,2年で感じていることですが、自分の市場価値をあげるには曖昧になっていることをすべて解決していくのが一番の近道だと思います。
すべてに根拠があるエンジニアは強い!
僕はそう思います。
ということで、本題から少しずれてしまいましたが、
技術取得から目をそらしていた、できればいい
そんな感じだったんだと思います。
GUIベースで操作することを否定しているのではなく、Gitについてちゃんと理解した上で使っているのならなんの問題もないと思います。
私自身はソースを頻繁に変更して、リモートリポジトリにプッシュしないといけない現場が多かったので、gitコマンドで操作したほうが作業効率が断然に違うと感じたので、最近はGUIではなくCUI※2ベースで操作してます。
※1:Graphical User Interfaceの略、※2:character user interfaceの略
よく使うコマンド
それでは本題のよく使うコマンドについて説明したいと思います。
- git add ファイル名
- git commit -m “メッセージ”
- git push origin <ブランチ名>
- git merge <ブランチ名>
- git branch <ブランチ名>
- git branch、git branch -a
- git checkout <ブランチ名>
- git checkout -b <ブランチ名>
- git checkout HEAD <ファイル名>、git checkout — <ファイル名>
- git checkout HEAD .、git checkout — .
- git checkout <FILE_NAME>
順に説明します。
【コマンド①】git add ファイル名
変更・追加したファイルcommit対象にする。
【コマンド②】git commit -m “メッセージ”
git addしたファイルをcommitする。
-mオプションをつけてコミットのメッセージを入力しないとエラーになります。
【コマンド③】git push origin <ブランチ名>
commitしたファイルをリモートリポジトリにプッシュ(反映)する。
例:git push origin master ←よく打つやつ
ここで言う、originはリポジトリURLのデフォルトの別名です。
なので、例の意味は
リモートリポジトリoriginのmasterブランチにコミットした内容を反映する。
となります。
※ちなみにoriginから変えたことないです。
【コマンド④】git merge <ブランチ名>
指定したブランチの内容を現在のブランチにマージする。
ここで注意すべきポイントは以下になります。
現在のブランチの変更したファイルをすべてコミットする必要がある
マージするブランチ(コマンドの引数)で変更したファイルを現在のブランチでも変更していて、コミットしていない場合はマージはエラーとなりうまくいきません。
すべての変更内容を見直して、コミットするか変更を戻しましょう。
同じファイルを変更し、コミットした状態でマージをした場合
この場合は、変更内容によって衝突が生じます。以下の対応をします。
衝突したファイルを修正し、これまでに説明したgit addとgit commit コマンドの順に実行します。
【コマンド⑤】git branch <ブランチ名>
ブランチの作成をする。
※作成した状態ではリモートリポジトリには反映されないので、プッシュする必要があります。
【コマンド⑥】git branch、git branch -a
ブランチの確認をする。
※-aオプションがない場合はローカルリポジトリのブランチの確認、-aがある場合はリモートブランチの確認
【コマンド⑦】git checkout <ブランチ名>
ブランチの切り替えをする。
【コマンド⑧】git checkout -b <ブランチ名>
ブランチ作成とブランチの切り替えを同時にする。
【コマンド⑨】git checkout HEAD <ファイル名>、git checkout — <ファイル名>
作業ツリーの特定のファイルをHEAD(最新のコミット)の状態に戻す。
なので、指定したファイルでコミットしていない反映は削除されます。
※HEADの代わりにHEAD^を使った場合は最新のコミットの1つ前のコミットに戻すことができます。
【コマンド⑩】git checkout HEAD .、git checkout — .
作業ツリーをHEAD(最新のコミット)の状態に戻す。
なので、コミットしていない反映はすべて削除されます。
【コマンド⑪】git checkout <FILE_NAME>
作業ツリーの特定のファイルをインデックスの状態に戻す。
※git addしていないファイルの更新情報を元に戻す。
つまり、git checkout HEAD <ファイル名>と同じです。
余談
5年前とかだと、ソース管理といえばSVN(subversion)を使うのが当たり前で、Gitは2005年から存在したみたいですが知らない人も多かった印象でした。
それから人気が急上昇して、SVN自体を聞かなくなった気がします。gitを利用したGitHubやGitLabのようなサービスも普及の大きな要因だと思います。
技術の流行りに敏感にならないとなと、記事を書いてて改めて思いました。
人気記事:【最新】Git初心者におすすめの本5選【サービス利用で効率よく開発】
