ブランチで変更されたファイルを確認する方法はありますか?
ブランチで変更されたファイルを確認する方法はありますか?
回答:
@Marco Pontiによる回答の代替手段であり、チェックアウトを回避します。
git diff --name-only <notMainDev> $(git merge-base <notMainDev> <mainDev>)
特定のシェルが$()構成を理解できない場合は、代わりにバックティックを使用してください。
git diff --name-only <some-other-branch>
現在のブランチとで異なるファイルが表示されます<some-other-branch>
。だから、あなたが間で異なるファイルを見つけるためにこれを使用することができ、本質的に同じコマンドですが、ノートの任意彼らはリモートで関連していない場合でも、二つの枝を。その比較が役立つかどうかは、ブランチのトポロジに依存します...また、<some-other-branch>
実際には、コミット、または1つに解決されるすべてのもの(タグなど)である可能性があることに注意してください。
<notMainDev>
と<MY_CURRENT_CO_BRANCH>
共通の祖先を持っていた最近の、そして比較<notMainDev>
その祖先に。ただし、git merge-base
2つの引数を期待するように、現在のブランチ名を指定する必要があります。少なくとも現在のバージョンでは、ショートカットはありません。
git branch | grep '\*' | awk '{print $2}'
<notMainDev>と現在のブランチの間のブランチのコミットを取得するgit merge-base <notMainDev> その後、git diff --name-only <notMainDev> $(git merge-base <notMainDev> git branch | grep '\*' | awk '{print $2}'
)を実行できます
あなたがしなければならないのは以下です:
git checkout <notMainDev>
git diff --name-only <mainDev>
これにより、2つのブランチ間で異なるファイル名のみが表示されます。
<mainDev>
、支店が分かれてから変わったことがわかると思います。git diff --name-only <sha-of-branch-point>
代わりに使用するか、チェックアウトを回避するために私が投稿した別の回答をご覧ください。
notMainDev
mainDevコミットで最新の状態に保たれると想定していましたが、通常はそれらの違いを確認することも役立つと思います。
<sha-of-branch-point>
とgit rev-parse <branch-name>
これは今のところ言われていないことに驚いています!
git diff master...branch
でのみ変更を確認してください branch
現在のブランチをチェックするには
git diff master...
jqrに感謝
これは
git diff $(git merge-base master branch) branch
したがって、マージベース(ブランチ間の最新の一般的なコミット)とブランチのヒント
マスターだけでなくorigin / masterを使用すると、ローカルマスターに日付が付いている場合に役立ちます
git diff --name-only master..
2つのブランチ間で異なるファイルの名前が必要な場合。
これには多くの方法があるとは思えません。私は誰かが以前に投稿したものと同じように、次の引数を使用してwhatchangedを使用します。
git whatchanged --name-only --pretty="" origin..HEAD
これはファイル名と、現在のブランチで変更されたものだけをリストします。
@twalbergの答えは本当に気に入りましたが、常に現在のブランチ名を入力する必要はありませんでした。だから私はこれを使っています:
git diff --name-only $(git merge-base master HEAD)
git diff master... --name-only
で、ターゲットブランチで実行すると同じ結果が得られます。あなたの答えと私が提供したコマンドとの間の良い点と悪い点についてフィードバックを提供するほど親切にできますか?
git diff master.. --name-only
(3ドットではなく2ドットしかないことに注意してください)と同等になると思います。ドットの意味を理解するには、この回答を
git diff --name-only master...branch-name
比較したいもの。
これほど簡単にできるとしたら?
git changed
メインブランチが「マスター」と呼ばれ、マスターから他のブランチを作成すると想定する場合は、このエイリアスを~/.gitconfig
ファイルに追加して、簡単にすることができます。
cbranch = !"git branch | grep '*' | cut -f2 -d' '"
changed = !"git diff --name-only $(git cbranch) $(git merge-base $(git cbranch) master)"
これらの仮定は、ほとんどの場合、ほとんどの状況で機能しますが、それらを作成していることを認識する必要があります。
また、をサポートするシェルを使用する必要があります$()
。シェルがこれをサポートしている可能性が非常に高いです。
git show --stat origin/branch_name
これにより、このブランチで追加または変更されたファイルのリストが表示されます。
どういうわけか誰も言及しなかったgit-tree
。https://stackoverflow.com/a/424142/1657819を参照してください
git-tree
それは配管コマンドなので、推奨されます。プログラマティックであることを意図しています(そしておそらく、より高速です)
(ベースブランチがであると仮定master
)
git diff-tree --no-commit-id --name-only -r master..branch-name
ただし、これにより、ブランチで影響を受けたすべてのファイルが表示されます。明示的に変更されたファイルのみを表示する場合は、次のコマンドを使用できます--diff-filter
。
git diff-tree --no-commit-id --name-only -r master..branch-name --diff-filter=M
--name-status
代わりに--name-only
を使用して、ファイルのステータスを確認することもできます(A
/ M
/ D
など)
rubocop --fail-level error $(git diff-tree --no-commit-id --name-only -r origin/master..HEAD --diff-filter=M)
受け入れられた回答-- git diff --name-only <notMainDev> $(git merge-base <notMainDev> <mainDev>)
は非常に近いですが、削除のステータスが間違っていることに気付きました。ブランチにファイルを追加しましたが、このコマンド(を使用--name-status
)は、削除したファイルに「A」ステータスと追加したファイルに「D」ステータスを与えました。
代わりにこのコマンドを使用する必要がありました。
git diff --name-only $(git merge-base <notMainDev> <mainDev>)
次のバッチファイルは、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)"