1git-diff-cache(1) 2================= 3v0.1, May 2005 4 5NAME 6---- 7git-diff-cache - Compares content and mode of blobs between the cache and repository 8 9 10SYNOPSIS 11-------- 12'git-diff-cache' [-p] [-r] [-z] [-m] [-M] [-R] [-C] [--cached] <tree-ish> 13 14DESCRIPTION 15----------- 16Compares the content and mode of the blobs found via a tree object 17with the content of the current cache and, optionally ignoring the 18stat state of the file on disk. 19 20OPTIONS 21------- 22<tree-ish>:: 23 The id of a tree object to diff against. 24 25-p:: 26 Generate patch (see section on generating patches) 27 28-r:: 29 This flag does not mean anything. It is there only to match 30 "git-diff-tree". Unlike "git-diff-tree", "git-diff-cache" 31 always looks at all the subdirectories. 32 33-z:: 34 \0 line termination on output 35 36-M:: 37 Detect renames; implies -p. 38 39-C:: 40 Detect copies as well as renames; implies -p. 41 42-R:: 43 Output diff in reverse. 44 45--cached:: 46 do not consider the on-disk file at all 47 48-m:: 49 By default, files recorded in the index but not checked 50 out are reported as deleted. This flag makes 51 "git-diff-cache" say that all non-checked-out files are up 52 to date. 53 54Output format 55------------- 56include::diff-format.txt[] 57 58Operating Modes 59--------------- 60You can choose whether you want to trust the index file entirely 61(using the '--cached' flag) or ask the diff logic to show any files 62that don't match the stat state as being "tentatively changed". Both 63of these operations are very useful indeed. 64 65Cached Mode 66----------- 67If '--cached' is specified, it allows you to ask: 68 69 show me the differences between HEAD and the current index 70 contents (the ones I'd write with a "git-write-tree") 71 72For example, let's say that you have worked on your index file, and are 73ready to commit. You want to see eactly *what* you are going to commit is 74without having to write a new tree object and compare it that way, and to 75do that, you just do 76 77 git-diff-cache --cached $(cat .git/HEAD) 78 79Example: let's say I had renamed `commit.c` to `git-commit.c`, and I had 80done an "git-update-cache" to make that effective in the index file. 81"git-diff-files" wouldn't show anything at all, since the index file 82matches my working directory. But doing a "git-diff-cache" does: 83 84 torvalds@ppc970:~/git> git-diff-cache --cached $(cat .git/HEAD) 85 -100644 blob 4161aecc6700a2eb579e842af0b7f22b98443f74 commit.c 86 +100644 blob 4161aecc6700a2eb579e842af0b7f22b98443f74 git-commit.c 87 88You can trivially see that the above is a rename. 89 90In fact, "git-diff-cache --cached" *should* always be entirely equivalent to 91actually doing a "git-write-tree" and comparing that. Except this one is much 92nicer for the case where you just want to check where you are. 93 94So doing a "git-diff-cache --cached" is basically very useful when you are 95asking yourself "what have I already marked for being committed, and 96what's the difference to a previous tree". 97 98Non-cached Mode 99--------------- 100The "non-cached" mode takes a different approach, and is potentially 101the more useful of the two in that what it does can't be emulated with 102a "git-write-tree" + "git-diff-tree". Thus that's the default mode. 103The non-cached version asks the question: 104 105 show me the differences between HEAD and the currently checked out 106 tree - index contents _and_ files that aren't up-to-date 107 108which is obviously a very useful question too, since that tells you what 109you *could* commit. Again, the output matches the "git-diff-tree -r" 110output to a tee, but with a twist. 111 112The twist is that if some file doesn't match the cache, we don't have 113a backing store thing for it, and we use the magic "all-zero" sha1 to 114show that. So let's say that you have edited `kernel/sched.c`, but 115have not actually done a "git-update-cache" on it yet - there is no 116"object" associated with the new state, and you get: 117 118 torvalds@ppc970:~/v2.6/linux> git-diff-cache $(cat .git/HEAD ) 119 *100644->100664 blob 7476bb......->000000...... kernel/sched.c 120 121ie it shows that the tree has changed, and that `kernel/sched.c` has is 122not up-to-date and may contain new stuff. The all-zero sha1 means that to 123get the real diff, you need to look at the object in the working directory 124directly rather than do an object-to-object diff. 125 126NOTE! As with other commands of this type, "git-diff-cache" does not 127actually look at the contents of the file at all. So maybe 128`kernel/sched.c` hasn't actually changed, and it's just that you 129touched it. In either case, it's a note that you need to 130"git-upate-cache" it to make the cache be in sync. 131 132NOTE 2! You can have a mixture of files show up as "has been updated" 133and "is still dirty in the working directory" together. You can always 134tell which file is in which state, since the "has been updated" ones 135show a valid sha1, and the "not in sync with the index" ones will 136always have the special all-zero sha1. 137 138 139Author 140------ 141Written by Linus Torvalds <torvalds@osdl.org> 142 143Documentation 144-------------- 145Documentation by David Greaves, Junio C Hamano and the git-list <git@vger.kernel.org>. 146 147GIT 148--- 149Part of the link:git.html[git] suite 150