イノベーション エンジニアブログ


株式会社イノベーションのエンジニアたちの技術系ブログです。ITトレンド・List Finderの開発をベースに、業務外での技術研究などもブログとして発信していってます!


このエントリーをはてなブックマークに追加

使えるけど実は知られていない?gitコマンドを調べてみた

こんにちは。
新卒エンジニアのはすみんです。

前回、初ブログということでKotlinについて書きました。
今回もKotlinでいこうと思っていたのですが、色々プライベートでバタバタしていたので、
なかなか時間が取れなかったので見送りです・・・

今回のブログのテーマは、最近情報収集しているなかで、 「git worktree」コマンドなるものを
初めて知りました。
そのときにふと思ったのが、「Gitコマンドって普段使っているもの限られているけど、
実際どれくらいあるんだろう?」
ということでした。
ということで今回色々調べてみたので、その紹介をします。
(※あくまで筆者の経験に基づくため、一部偏りがあった際はご容赦くださいませ)

目次
・Gitコマンドとは
・基本的なGitコマンド
・知っているとオトクなGitコマンド
・その他Tips
・まとめ

Gitコマンドとは

みなさん周知のことだと思いますが、Gitコマンドについて簡単におさらいです。
Gitコマンドとは、

「プログラムのソースコードなどの変更履歴を記録・追跡するための分散型バージョン管理システムである」

とWikipedia先生はおっしゃっています。
https://ja.wikipedia.org/wiki/Git

なななんと、Linuxカーネルの開発者、リーナス・トーバルズによって開発された言語だったんですね。。。
筆者はかなりびっくりしています、あのLinuxを開発したにも飽き足らず、Gitコマンドも開発していたんですね。
やはり、Linuxなどの規模がものすごい大きなものになると、そういったバージョン管理システムの必要性を
強く感じていたのでしょうか。
あぁ、読んでいたらやっぱりそのようでした。(諸説あります)

Linuxカーネルの開発では、巨大なソースコードの集合を扱うため、変更点の抽出やリポジトリ操作が
できるかぎり高速にできる必要がある。他の様々なバージョン管理システムをあたったが、満足のいく
ものがなかったため、Gitではこのような問題も出来る限り解決できるよう、いくつかのアイデアが導入
されている(この部分は、他のバージョン管理システムにも同様の機能が導入されるようになった)。

2005年12月にリリースされ、そこからGitHubなどが開発されてきて、
今日の開発スタイルの基盤はこの時期に確立されていったんですね。
そう考えると、身近な課題を解決することが、世界基準のプロダクトになる可能性も大いにあるということです。
どうせ開発するなら、大きな夢を見て開発していきたいですね。

さて、Gitの開発者がリーナス・トーバルズということでかなり脱線してしましたが、Gitの概要としてはこんな感じです。
では早速、Gitコマンドの紹介に入っていきましょう。

基本的なGitコマンド

まずは、基本的なGitコマンドの紹介です。
ちなみに、Gitコマンドは全部で156種類でした。(2017年10月現在)
git-help-a.png

git help -a で全Gitコマンドが参照できるので、気になった人は調べてみてください。

基本的なGitコマンドの一覧です。
・git init
・git add
・git commit
・git push
・git pull
・git reset
・git log
・git status
・git diff
・git cheackout
・git branch
・git clone
・git fetch
・git merge
・git rm

これだけは少なくとも知っておきたいですね。
説明は今回は省きます、他に紹介しているサイトがたくさんあるので。
ご興味ある方はコマンド名で調べてみてください。

知っているとオトクなGitコマンド

次に、ちょっと通?なGitコマンドについていくつか紹介していきます。
これを覚えてると、開発作業が少し捗るかも?なので、覚えておきましょう。

紹介するコマンドの一覧です。
・git worktree
・git stash
・git reflog
・git cherry-pick

git worktree

まずは今回のブログのテーマのきっかけになったgit worktreeから紹介していきます。

概要

git worktreeは、指定ブランチの内容を指定のディレクトリに反映してくれるコマンドです。
現在のブランチで作業しているけど、ちょっとした修正や確認のために色々したいな〜ってときに
役に立ってくれます。

使い方
git worktree add [directoryName] [branchName]

のように使います。
例えば、以下のようなコマンドを打ってみます。

git worktree add develop-worktree develop

すると、作業ディレクトリの直下に、developブランチの内容を反映したディレクトリが作成されます。
これが概要で言っていたちょっと色々したいときに便利と言っていた所以です。
処理が終わったらそのディレクトリを削除してしまえばいいので、手軽に実験できます。

worktree一覧を見たいときは、

git worktree list

で確認できます。
また、worktreeを削除したい場合は

git worktree prune

で出来るので簡単です。

worktreeを使いこなして色々遊んでみましょう!

git stash

最近良く使うgit stashです。

概要

git stashは、現在のブランチ状態をコミットせずに一時保存できる優れものくんです。
概念的にはworktreeと似ていますが、複数のブランチを抱えるときに力を発揮してくれます。
例えば、複数の開発や修正を抱えているときやメンバーのコードレビューをしなきゃいけないとき、
ありますよね?
そんなときに現在の状態を保存してくれるのは役に立ちますな〜!

使い方

git stashで大きく使うのは、一時保存と保存の反映です。
一時保存は、

git stash save "リスト名、コメントなど"

保存の反映は、

git stash pop

です。
また、一時保存しているリストの表示も可能です。

git stash list

コメントも残すことも出来るので、うっかり作業内容をど忘れしないよう備忘録をつけることも可能です。
複数saveしたときには、stash@{0}:のように番号が割り振られます。
popするときには

git stash pop stash@{0}

のようにすることで反映できます。

git stashを使いこなしてマルチタスクをさくさくこなしましょう!

git reflog

git reflogは、HEADやブランチ先端の動きの履歴を参照することが出来ます。
ちなみに、git log -gで同じような動作をします。
過去の自分や他者が、どういった動きをしているのかが参照できるため、
間違ってコミットしてしまった場合などにgit resetする際に便利です。

git cherry-pick

特定のコミットのみ反映することが出来るコマンドです。
他ブランチの内容を、該当ブランチに適用したい場合などに使ってみるといいかもしれません。

その他Tips

ターミナルを使っていると、aliasでコマンド入力を楽にしたいエンジニアは多いはず。
ちなみに、Gitコマンドにおいても、.gitconfigに設定をすることで適用することができます。
調べている中で、面白いaliasに出会いました。有用な記事だったので、紹介します。
aliasというか、Gitコマンドの使い方にこんなものがあるのかと勉強になりました。

# git log with graphical tree
alias glogg='env LANG=en_US.utf-8 git log --graph --date-order --format="%h (%an) %s %d" --branches'
git のレビジョンツリーを全てのローカルブランチに渡ってグラフィカルに表示するコマンドです。
git log --graph だけだと表示フォーマットが微妙でいまいちなのが git らしいと思います。
# git log with short statistics
alias glog='env LANG=en_US.utf-8 git log --stat --decorate --date-order'
さきほどと同じくのログ表示のエイリアスです。こちらは詳細にログを見たい場合に使用します。
コミットをレビューしたいときには -p オプションを足して glog -p とかすれば diff も表示してくれます。

その他にもいい感じのalias設定があるので、興味ある方は見てみてください。
引用元:http://outofsearch.blogspot.jp/2013/05/git.html

まとめ

いかかでしたでしょうか。
今回調べるにあたり、Gitコマンドの色々な使い方を知ることが出来て勉強になりました。

普段使っているコマンドは少なかったとしても、実は有用なGitコマンドはたくさんあるんですね。

新しい技術や情報は日々アップデートされ続けていますが、
今回のGitでの経験のように、普段使っている技術でも深く調べてみると知らないことが多いと気づけたので、
気になった知識はその機会に一旦止まって色々調べていこうと思いました。

終わり