Gitで特定の作業ブランチにおいて派生元からのマージコミットを除く全コミットから変更ファイル一覧を取得したい

「マージで別ブランチの変更内容を取り込み過ぎて自分のブランチでどのファイルを直したのか分かりません」と言われたので調べました。(リベースだと、そういうことも無くなりますが、「慣れないうちは、とりあえずマージ」という方針で進めていました)

前提条件

  • 開発ブランチの”develop”から作業ブランチの”feature/foo”を作成
  • 作業ブランチにチェックアウトして何らかの作業をしつつ色々とコミット
  • 作業中にも開発ブランチが進んでいたので時々mergeで取り込んだ

調査法補

ターミナルでコマンドを実行します。

$ git log --no-merges --name-only --oneline develop..feature/foo

ブランチ間の差分を取ります。しかし、これだと重複行があるのと、英数7文字から成るコミットIDが残りますので、これを除去します。

$ git log --no-merges --name-only --oneline develop..feature/foo | grep -v '^[0-9a-f]\{7\} ' | sort | uniq

ただし、上記ではdevelopにマージしてしまった後だと、ブランチ間に差が無いので何も出力されないです。その場合は、下記コマンドになります。

$ git log --no-merges --name-only --first-parent develop..feature/foo | grep -vE '^(Author:|Date:|commit|    )' | sort | uniq

“–first-parent”については「このフラグを使用すると、マージコミットの最初の親のみをトレースできます。これは通常、変更が発生したブランチを指します」ということらしいです。

タイトルとURLをコピーしました