Gitを使っていて「これ、もっと早く知っておけばよかった…」と思う瞬間は多いもの。Gitコマンドには、知っていると便利な小技がたくさんあります。

この記事では、実務で役立つGit小技を紹介します。

コミット修正系の小技

コミットし忘れたファイルを直前のコミットに含めたい

直前のコミットに追記したい場合、以下のようにします。

git add .       # ステージング
git commit --amend

この操作により、最新のコミットに追記できます。

push済みのリモートブランチに対して行う場合は、--forceが必要なので注意。

直前のコミットメッセージだけ変更したい

コードは変更せず、メッセージだけ修正したいときは以下。

git commit --amend -m "fix: ログ出力の不具合修正"

誤字や説明不足を補うのにも便利です。


改行・パーミッション系の設定

改行コードによる差分を防ぐには?

WindowsとUnix系で改行コードが異なるため、git diffで余計な差分が出ることがあります。以下の設定で制御可能です。

git config core.autocrlf false         # 自動変換しない
git config core.safecrlf true          # 安全でない改行変換は拒否
git config core.whitespace cr-at-eol   # ^M 表示を無効化

改行差分によるノイズを減らすのに非常に役立ちます。

ファイルのパーミッションの差分を無視する

chmodなどにより発生する不要な差分を抑止できます。

git config core.filemode false

チームで異なるOS環境を使っている場合などに便利な設定です。


2コミットの分岐点(共通の親)を調べたいとき

共通の祖先コミット(merge-base)を取得する

「AとB、どこで枝分かれしたの?」というときに便利なのが、共通の祖先コミット(merge-base)を調べるこのコマンドです。

git merge-base <commit-A> <commit-B>

以下のようにして、feature/login ブランチと main ブランチの 分岐点(共通の親コミットSHA) を取得できます。

git merge-base feature/login main

git diffgit logの範囲を決めたいときにも役立ちます。

ブランチ間の差分抽出や、履歴トレースの精度を上げるときに非常に便利なので、ぜひ活用してみてください。


差分をZIPでまとめて出力する技

「ある2コミット間の差分だけをZIPで取得したい」ケースに使えます。

git archive develop \
--format=zip -o changes.zip \
--prefix=data/ \
`git diff \
--name-only \
--diff-filter=d \
abc123def456 \ # 開始コミット
def456ghi789 \ # 終了コミット
-- ':!tests/*' ':!webroot/fontawesome/*'`

このようにすると、特定の範囲の変更ファイルだけをZIP化できるので、検証環境への配布や一時バックアップに最適です。


ローカルブランチの整理テクニック

リモート追跡されている feature/* ブランチを一覧表示

「追跡付きのfeatureブランチだけ抽出したい」というときに。

git for-each-ref --format '%(refname:short)' refs/heads/feature/* | while read branch; do
  if git rev-parse --abbrev-ref "$branch@{upstream}" >/dev/null 2>&1; then
    echo "$branch"
  fi
done

不要なローカルブランチの棚卸しに使えます。

上記ブランチを一括削除したい場合

一覧取得だけでなく、そのまま削除まで行いたい場合は以下。

git for-each-ref --format '%(refname:short)' refs/heads/feature/* | while read branch; do
  if git rev-parse --abbrev-ref "$branch@{upstream}" >/dev/null 2>&1; then
    git branch -d "$branch"
  fi
done

これで、リモートに反映済のブランチだけを安全に削除できます。


おわりに

Gitには、知っているだけで作業効率が大きく変わる便利なTipsや設定項目がたくさんあります。

今回紹介したものは、すぐにでも活用できる実用的なものばかり。日々の開発に取り入れて、スマートにGitを使いこなしましょう!