Can I use git diff on untracked files?

前端 未结 10 1090
你的背包
你的背包 2020-11-27 09:58

Is it possible to ask git diff to include untracked files in its diff output, or is my best bet to use git add on the newly created files and the e

10条回答
  •  死守一世寂寞
    2020-11-27 10:34

    For my interactive day-to-day gitting (where I diff the working tree against the HEAD all the time, and would like to have untracked files included in the diff), add -N/--intent-to-add is unusable, because it breaks git stash.

    So here's my git diff replacement. It's not a particularly clean solution, but since I really only use it interactively, I'm OK with a hack:

    d() {
        if test "$#" = 0; then
            (
                git diff --color
                git ls-files --others --exclude-standard |
                    while read -r i; do git diff --color -- /dev/null "$i"; done
            ) | `git config --get core.pager`
        else
            git diff "$@"
        fi
    }
    

    Typing just d will include untracked files in the diff (which is what I care about in my workflow), and d args... will behave like regular git diff.

    Notes:

    • We're using the fact here that git diff is really just individual diffs concatenated, so it's not possible to tell the d output from a "real diff" -- except for the fact that all untracked files get sorted last.
    • The only problem with this function is that the output is colorized even when redirected; but I can't be bothered to add logic for that.
    • I couldn't find any way to get untracked files included by just assembling a slick argument list for git diff. If someone figures out how to do this, or if maybe a feature gets added to git at some point in the future, please leave a note here!

提交回复
热议问题