くりにっき

フルスタックキュアエンジニアです

gitで自分が修正したファイルだけを別のコマンドの引数で渡したい

よく忘れるのでメモ

忙しい人のまとめ

git diff --name-only --diff-filter=ACMR origin/master...HEAD | xargs <なんかコマンド>

例)自分が修正したファイルだけをrubocopで静的解析チェックするワンライナー

git diff --name-only --diff-filter=ACMR origin/master...HEAD | grep ".rb" | xargs bundle exec rubocop

コマンド解説

git diff

動作確認したgitのバージョンは 2.5.0

  • --name-only : ファイルパスだけを出力
    • xargs で渡す場合にはファイルパスだけの方が都合がいい
  • --diff-filter : Add(追加), Copied(コピー), Modified(修正), Renamed(リネーム)されたファイルだけを抽出
    • これをつけると削除されたファイルやリネーム前のファイルも出てくるため (存在しないファイルを後続のコマンドに渡してもエラーになる)
  • origin/master...HEAD : 比較したいbranchをそれぞれ指定。HEADはなくてもok *1

詳細は git diff --help 参照

grep

rubocopにrubyのファイルだけ渡すため(viewやymlとかにrubyのコードが含まれていた場合にそれもチェックするので意図しないoffenseを出すので回避したい)

*1:省略時はHEADなので