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 diff
やgit 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を使いこなしましょう!