エンジニア達に聞いた「覚えておくと便利なGitコマンド」
はじめに
社内のエンジニアと「どのようなGitコマンドを頻繁に利用しているのか、特に便利だと感じているコマンドは何か」について話し合う機会がありました。
そのGitコマンドの中には筆者自身も知らなかったコマンドやオプションも含まれており、とても良い機会になったと考えています。
そこで今回は、エンジニアとの会話の中であがったGitコマンドのいくつかを記事にしたいと思います。
この記事から新人エンジニアだけでなく、既にGitに慣れ親しんでいる中堅エンジニアにも新たな発見を提供できれば嬉しいです!
便利なGitコマンド
git switch
git checkout
の一部の機能の代替としてリリースされたのが、git switch
です
ブランチを作る
git switch -c ブランチ名
git checkout -b ブランチ名
ブランチを切り替える
git switch ブランチ名
git checkout ブランチ名
git stash
コミットはせずに変更を退避したいときによく使います。
stash
で現在の変更を退避して、別の作業を行って戻ってきたときに、退避させていた変更を戻して作業を再開することができます。
変更を退避する
git stash push "メッセージ" -u
※git stash save
は非推奨です
-u
は-include-untracked
の略で、新規作成ファイル(追加対象に含まれていないファイル)も退避することができます
退避した作業一覧を表示する
git stash list
退避した作業を戻す
git stash apply stash@{n}
stash@{n}
のstash名は省略することも可能です。省略した場合は、直近にstashした情報が戻されます。
退避した作業を元に戻すと同時に、stashのリストから消す
git stash pop stash@{n}
git reset
直前のコミットを取り消したい(コミットのみの取り消し)
git reset --soft HEAD^
直前のコミットを取り消したい(全ての取り消し)
git reset --hard HEAD^
直前の操作を無かったことにする
git reset --hard ORIG_HEAD
最後に成功した操作(例えばmergeやrebaseなど)の直前の状態に戻すコマンドです。
マージが予想外の結果になったなど、「何かが上手くいかなかった場合に最後の操作を完全に取り消す」ためによく使われます。
git commit
直前のコミットを修正する
git commit --amend -m "修正されたコミット"
これらはpushする前のコミットを修正したときのみに利用するようにしてください。
コミット内容を後から追加する
git commit --amend --no-edit
--no-edit
オプションを使うことで、前回のコミットメッセージのままコミットできます。
空の(変更のない)コミットを作成する
git commit --allow-empty -m "メッセージ"
Gitは変更がない時にはコミットを許可していないのですが、--allow-empty
を使用すると、変更がない状態でもコミットを作成することができます。
このような空のコミットは、継続的インテグレーション(CI)をトリガーするためなどに使用されることが多いです。
git merge
マージを取り消す
git merge --abort
マージコンフリクトが発生した場合に、マージを完全に中断し、マージ前の状態に戻すことができます。
git branch
特定の検索ワードを含むブランチを探す
git branch (--all) | grep "検索ワード"
全てのブランチをリスト表示し、その中から特定の検索ワードを探すために使用されます。
--all
を利用すると、リモートブランチも含む全てのブランチをリスト表示されるようになります。
マージ済みのブランチを一括で削除する
git branch --merged | egrep -v "(^\*|master|develop)" | xargs git branch -d
--merged
で、マージ済みブランチの一覧を表示します
egrep -v "(^\*|master|develop)"
の部分で、一覧表示されたブランチ名の中から現在のブランチ(アスタリスクが先頭についているブランチ)、developブランチ、masterブランチを除外します。つまり、これらのブランチは削除対象から除かれます。
そして最後のxargs git branch -d
で選定したマージ済みのブランチを削除します。
git diff
ステージングエリアとの差分を表示する
git diff
ワーキングディレクトリとステージングエリア(git add
を使ってステージングしたもの)との間の差分を表示します。
リモートリポジトリの指定ブランチとの差分を表示する
git diff リモート名/ブランチ名..HEAD
※このコマンドを使用する前に、git fetch リモート名
を実行して、最新情報を取得してください
リモートリポジトリの指定ブランチと、現在のローカルリポジトリのHEAD(通常は現在チェックアウトしているブランチの最新のコミット)間の差分を表示します。
コミット間の差分を表示する
git diff commit1 commit2
commit1とcommit2間の差分を表示します。ここでcommit1とcommit2はコミットハッシュです。
ブランチ間の差分を表示する
git diff branch1..branch2
2つのブランチ間の差分を表示します。
gitにエイリアスを設定する
Gitコマンドのエイリアス設定により、頻繁に使う長いコマンドを短縮系で使えるので、Gitコマンドの使いやすさが向上します。
また自分のワークフローに合わせたカスタマイズが可能なので、誤入力のリスクも減少します。
例えば筆者は以下のようなエイリアスを利用しています
// エイリアスの例
switch = sw
branch = br
status = st
commit = co
// 設定用コマンド
git config --global alias.sw switch
git config --global alias.br branch
git config --global alias.st status
git config --global alias.co commit
他にもたくさんのエイリアスの例が存在しているので、気になった方はこちらの記事もご確認ください。
さいごに
今回はエンジニアに聞いた「覚えておくと便利なGitコマンド」について紹介しました。
どれもとても便利なコマンドばかりなので、ぜひ使ってみてください。
またより便利なコマンドをご存知であれば、コメントで共有していただけると幸いです。
最後までお読みいただきありがとうございました!
Discussion