ブランチで変更されたファイルを確認する方法はありますか?
16 に答える
@Marco Pontiによる回答の代替案であり、チェックアウトを回避する:
git diff --name-only <notMainDev> $(git merge-base <notMainDev> <mainDev>)
特定のシェルが$()構造を理解しない場合は、代わりにバックティックを使用してください。
あなたがしなければならないのは次のとおりです。
git checkout <notMainDev>
git diff --name-only <mainDev>
これにより、2つのブランチ間で異なるファイル名のみが表示されます。
これは今まで言われていないことに驚いています!
git diff main...branch
そのため、変更のみを参照してくださいbranch
現在のブランチの使用を確認するには
git diff main...
jqrに感謝
これは
git diff $(git merge-base main branch) branch
したがって、マージ ベース (ブランチ間の最新の共通コミット) とブランチ チップ
またorigin/main
、マスターの代わりに使用すると、ローカルのメインが古い場合に役立ちます
これを行う方法がたくさんあるとは信じられません。次の引数を使用して、誰かが以前に投稿したように whatchanged を使用します。
git whatchanged --name-only --pretty="" origin..HEAD
これはファイル名をリストするだけで、現在のブランチで変更されたものだけです。
@twalbergの回答はとても気に入りましたが、現在のブランチ名を常に入力する必要はありませんでした。だから私はこれを使用しています:
git diff --name-only $(git merge-base master HEAD)
git diff --name-only master...branch-name
比較したいもの。
git whatchanged
良い代替案のようです。
こんなに簡単にできるとしたら?
git changed
メイン ブランチが「マスター」と呼ばれ、マスターから他のブランチを作成すると仮定しても構わない場合は、このエイリアスを~/.gitconfig
ファイルに追加して簡単にすることができます。
cbranch = !"git branch | grep '*' | cut -f2 -d' '"
changed = !"git diff --name-only $(git cbranch) $(git merge-base $(git cbranch) master)"
これらの仮定は、ほとんどの状況でほとんどの人に当てはまりますが、それを行っていることに注意する必要があります。
また、 をサポートするシェルを使用する必要があります$()
。シェルがこれをサポートしている可能性が非常に高いです。
次のバッチ ファイルは twalberg の回答に基づいていますが、Windows でも動作します。
@ECHO OFF
C: :: <== OR USE A DIFFERENT DRIVE
CD \path\to\where\git\files\are :: <== CHANGE TO THE ACTUAL PATH
SET /p b="Enter full path of an ALREADY MERGED branch to compare with origin/master: "
bash --login -i -c "git diff --name-only %b% $(git merge-base %b1% origin/drop2/master)"
PAUSE
上記は、メイン ブランチが origin/master であり、Git のインストール時に git bash が含まれていること (およびその場所がパス環境にあること) を前提としています。実際には、構成された差分ツール (kdiff3) を使用して実際の違いを表示する必要があったため、上記の次の bash コマンドを置き換えました。
bash --login -i -c "git difftool --dir-diff %b% $(git merge-base %b1% origin/drop2/master)"
@twalberg と @iconoclast が持っていたものから拡張すると、何らかの理由で cmd を使用している場合は、次を使用できます。
FOR /F "usebackq" %x IN (`"git branch | grep '*' | cut -f2 -d' '"`) DO FOR /F "usebackq" %y IN (`"git merge-base %x master"`) DO git diff --name-only %x %y