目次
はじめに
gitでトピックブランチを切って最初にpushする時に、カレントブランチ名を打つのがとにかくダルい水野です。
今回はエンジニアなら使いこなせないと辛いgitの記事です。
add, commit, push しか使わないgit初心者のあなたに、僕が便利だと思う基本のコマンドを紹介します。
目次
なぜadd,commit,pushしか使わないのか
チーム開発をしていないからでしょうね。
僕は学生の頃、長いこと add, commit, push しか知りませんでした。
というより、他のコマンドを使いたいケースがあまりありませんでした。
ブランチは個人開発ならmasterだけで事足りますし。
個人のちょっとしたサービスでもやらかした時の修復が面倒なので、ブランチを切った方がいいとは思いますが。
この記事で紹介するコマンドのほとんどを、僕は社会人になってからガッツリ使い始めています。
僕の学生のころのレベルがとにかく低かったです…(今も低い)。
grep
これないと無理
1つめはLinuxのコマンドでも有名なgrepです。
grepを知らない人に軽く説明すると、ファイル内のテキストを検索するコマンドです。
プロジェクトに入ったばかりでソースコードを把握していない頃は頻繁に使うでしょう。
僕は配属当初毎日何回も打ちまくっていました。
というかある程度慣れてソースコードを把握しても頻繁に使う、そんなコマンドです。
使い方は簡単
[code lang=text] git grep 検索したい文字列[/code]
これでOKです。
例えば僕の開発メモ用リポジトリで使うとこんな感じになります。
基本コマンドとgitのgrepの違いは速さです。
git grep
はリポジトリ内の除外ファイルを除いて検索するので超高速です。一瞬で終わります。
Railsのプロジェクトなら、.gitignote
で除外されているであろう/vender/bundle
や/log/
などは検索しません。
当然AtomやVSCodeといったエディタ、RubymineなどのIDEの検索より早いです。
行番号はgit config --global grep.lineNumber true
を一度叩くか~/.gitconfig
に以下を記載しておけばデフォルトで表示されます。
[/code]
他にもパスやファイルの指定、正規表現などは当然使えます。
詳しくはググってください!
diff
これないと無理
2つめもLinuxのコマンドで有名なdiffです。
diffを知らない人に軽く説明すると、ファイル同士の比較(差分)です。
基本コマンドとgitのdiffでは結構違いがあります。
基本コマンドのdiffはファイルとファイルの差分ですが、gitのdiffは指定したブランチや特定コミットとの差分を表示します。
HEADとの差分がある状態で git diff
を打ち込むとこうなります。
デフォルトはHEADとワークツリーの差分が表示されます。
変更があったファイルをaddすると表示されなくなりますが、--cached
を付けると表示されます。
特定のコミットの差分を表示したり、特定のブランチとの差分を表示するには以下のようになります。
コミットハッシュは一つだけ指定するとHEADとの差分、ブランチは一つだけ指定するとカレントブランチとの差分が表示されます。
git diff ブランチ
[/code]
正直コマンドラインでは差分が見辛いので、SorceTreeなどのGUIクライアントを使った方が見やすいです。
オプションや設定次第で見やすいのでしょうが…
rebase
これはチーム開発じゃないと使う機会が少ないと思います。
rebaseはそのブランチの派生元ブランチを変更します。
例えばmasterブランチから切ったtopicブランチがカレントブランチとして
[/code]
とすると、topicブランチはhogehogeブランチから切ったことになります。
これのなにがありがたいかと言うと、
- 余計な差分が消える
- コミットログが綺麗になる
- コンフリクトが解消する
などがあります。
reabaseは使うまで理解しづらいので、コンフリクトが発生したり余計なコミットまで含まれているときに使ってみてください!
複数人のコミットが含まれているブランチでrebaseしてpush -f
すると変なことになる可能性が高いので、おとなしくmergeにしておきましょう。
stash
ワークツリーのコミットされていない変更を一時退避します。
gitはコミットしていない変更があると、他のブランチにチェックアウトできないことが結構あります。
でも今すぐブランチを変えたい、そんなときにstashを使います。
stash-testブランチとhogehogeブランチがあり、git.md
というファイルで異なる変更があるとします。
stash-testブランチではまだその変更をコミットしていません。
このときstash-testブランチからhogehogeブランチにcheckoutしようとしても、エラーが出てできません。
ここでstashを使いましょう。
すると変更がなくなり(一時退避)、checkoutできるようになります。
git stash list
でstashの一覧を表示することができ、git stash pop
で最新のstash(stash@{0}
)が復活します。
すると差分やステータスに再度表示されます。
stashはdropや対象stashの指定などが可能です。
ぜひ調べてみてください。
僕のメモもよかったら参考にしてください!
まとめ
gitで以下の4つのコマンドを使えるようになると捗ります。
- grep
- diff
- rebase
- stash
rebaseより先にstatusやcherry-pickを紹介すべきだったと今さら反省しております…
次の記事でご紹介します!
おわりに
リンクバルでは gitをバリバリ使いこなすエンジニアを絶賛募集中 です。ご応募お待ちしております!