Filter git diff by type of change

后端 未结 5 1344
醉梦人生
醉梦人生 2020-11-28 01:36

Is there a way to limit git diff to changed files?

I\'d like to see the differences between two commits, but exclude paths that don\'t exist in one or t

相关标签:
5条回答
  • 2020-11-28 01:58

    I've used Notepad++ (Windows), and these regular expressions to filter out extension types and certain paths from a diff file.

    ^Index.*\.(dll|pdb|exe|txt|zip|log|ism|resx|tlog|htm|lib)$[\s\S.]*?^Index
    ^Index: Shared/.+$[\s\S.]*?^Index
    ^Index: Next/source/Utility/.+$[\s\S.]*?^Index
    

    Only problem is, when it reaches the end. You have to 'ctrl+home' and go again until it finds nothing.

    (Replace whats found with 'Index')

    0 讨论(0)
  • 2020-11-28 01:59

    As Git 2.10 (Q3 2016) will remind us, there is an easier way to "show everything except added/deleted files." (actually since Git 1.8.5, July 2013)

     git diff --diff-filter=ad master..
    

    See commit 16726cf (14 Jul 2016) by Junio C Hamano (gitster).
    (Merged by Junio C Hamano -- gitster -- in commit 2f8c654, 08 Aug 2016)

    diff: document diff-filter exclusion

    In v1.8.5 days, 7f2ea5f (diff: allow lowercase letter to specify what change class to exclude, 2013-07-17) taught the "--diff-filter" mechanism to take lowercase letters as exclusion, but we forgot to document it.

    So the documentation on diff-options now (finally) includes:

    These upper-case letters can be downcased to exclude.
    E.g. --diff-filter=ad excludes added and deleted paths.

    0 讨论(0)
  • 2020-11-28 02:05

    To see all modified and new files you can use

    git diff --name-only --diff-filter=ACMR PREV_VERSION master
    

    PREV_VERSION is the hash of your first commit.

    To get an export as zip you can use this code

    git archive --output=export.zip HEAD $(git diff --name-only --diff-filter=ACMR PREV_VERSION HEAD)
    

    Note: .gitignore is not in export.zip

    0 讨论(0)
  • 2020-11-28 02:07

    You are looking for --diff-filter=M to show only files *M*odified between the two branches.

    From man git-diff

    --diff-filter=[ACDMRTUXB*]

    Select only files that are

    • A Added
    • C Copied
    • D Deleted
    • M Modified
    • R Renamed
    • T have their type (mode) changed
    • U Unmerged
    • X Unknown
    • B have had their pairing Broken
    • * All-or-none

    Any combination of the filter characters may be used.

    When * (All-or-none) is added to the combination, all paths are selected if there is any file that matches other criteria in the comparison; if there is no file that matches other criteria, nothing is selected.

    0 讨论(0)
  • 2020-11-28 02:12

    You can use the --diff-filter flag to do precisely this. git diff --diff-filter=CMRTUXB master.. should show everything except added/deleted files.

    0 讨论(0)
提交回复
热议问题