🐭

エンジニア達に聞いた「覚えておくと便利なGitコマンド」

2023/06/28に公開

はじめに

社内のエンジニアと「どのような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

他にもたくさんのエイリアスの例が存在しているので、気になった方はこちらの記事もご確認ください。
https://dev.classmethod.jp/articles/git-config-alias-19/

さいごに

今回はエンジニアに聞いた「覚えておくと便利なGitコマンド」について紹介しました。
どれもとても便利なコマンドばかりなので、ぜひ使ってみてください。
またより便利なコマンドをご存知であれば、コメントで共有していただけると幸いです。

最後までお読みいただきありがとうございました!

Arsaga Developers Blog

Discussion