1This file contains reference information for the core git commands. 2 3The README contains much useful definition and clarification 4info - read that first. And of the commands, I suggest reading 5'git-update-cache' and 'git-read-tree' first - I wish I had! 6 7David Greaves <david@dgreaves.com> 824/4/05 9 10Updated by Junio C Hamano <junkio@cox.net> on 2005-05-05 to 11reflect recent changes. 12 13Identifier terminology used: 14 15<object> 16 Indicates any object sha1 identifier 17 18<blob> 19 Indicates a blob object sha1 identifier 20 21<tree> 22 Indicates a tree object sha1 identifier 23 24<commit> 25 Indicates a commit object sha1 identifier 26 27<tree-ish> 28 Indicates a tree, commit or tag object sha1 identifier. 29 A command that takes a <tree-ish> argument ultimately 30 wants to operate on a <tree> object but automatically 31 dereferences <commit> and <tag> that points at a 32 <tree>. 33 34<type> 35 Indicates that an object type is required. 36 Currently one of: blob/tree/commit/tag 37 38<file> 39 Indicates a filename - always relative to the root of 40 the tree structure GIT_INDEX_FILE describes. 41 42 43################################################################ 44git-cat-file 45 git-cat-file (-t | <type>) <object> 46 47Provides contents or type of objects in the repository. The type 48is required if -t is not being used to find the object type. 49 50<object> 51 The sha1 identifier of the object. 52 53-t 54 Instead of the content, show the object type identified 55 by <object>. 56 57<type> 58 Typically this matches the real type of <object> but 59 asking for type that can trivially dereferenced from the 60 given <object> is also permitted. An example is to ask 61 "tree" with <object> for a commit object that contains 62 it, or to ask "blob" with <object> for a tag object that 63 points at it. 64 65Output 66 67If -t is specified, one of the <type>. 68 69Otherwise the raw (though uncompressed) contents of the <object> will 70be returned. 71 72 73################################################################ 74git-check-files 75 git-check-files <file>... 76 77Check that a list of files are up-to-date between the filesystem and 78the cache. Used to verify a patch target before doing a patch. 79 80Files that do not exist on the filesystem are considered up-to-date 81(whether or not they are in the cache). 82 83Emits an error message on failure. 84preparing to update existing file <file> not in cache 85 <file> exists but is not in the cache 86 87preparing to update file <file> not uptodate in cache 88 <file> on disk is not up-to-date with the cache 89 90Exits with a status code indicating success if all files are 91up-to-date. 92 93see also: git-update-cache 94 95 96################################################################ 97git-checkout-cache 98 git-checkout-cache [-q] [-a] [-f] [-n] [--prefix=<string>] 99 [--] <file>... 100 101Will copy all files listed from the cache to the working directory 102(not overwriting existing files). 103 104-q 105 be quiet if files exist or are not in the cache 106 107-f 108 forces overwrite of existing files 109 110-a 111 checks out all files in the cache (will then continue to 112 process listed files). 113 114-n 115 Don't checkout new files, only refresh files already checked 116 out. 117 118--prefix=<string> 119 When creating files, prepend <string> (usually a directory 120 including a trailing /) 121 122-- 123 Do not interpret any more arguments as options. 124 125Note that the order of the flags matters: 126 127 git-checkout-cache -a -f file.c 128 129will first check out all files listed in the cache (but not overwrite 130any old ones), and then force-checkout file.c a second time (ie that 131one _will_ overwrite any old contents with the same filename). 132 133Also, just doing "git-checkout-cache" does nothing. You probably meant 134"git-checkout-cache -a". And if you want to force it, you want 135"git-checkout-cache -f -a". 136 137Intuitiveness is not the goal here. Repeatability is. The reason for 138the "no arguments means no work" thing is that from scripts you are 139supposed to be able to do things like 140 141 find . -name '*.h' -print0 | xargs -0 git-checkout-cache -f -- 142 143which will force all existing *.h files to be replaced with their 144cached copies. If an empty command line implied "all", then this would 145force-refresh everything in the cache, which was not the point. 146 147To update and refresh only the files already checked out: 148 149 git-checkout-cache -n -f -a && git-update-cache --ignore-missing --refresh 150 151Oh, and the "--" is just a good idea when you know the rest will be 152filenames. Just so that you wouldn't have a filename of "-a" causing 153problems (not possible in the above example, but get used to it in 154scripting!). 155 156The prefix ability basically makes it trivial to use git-checkout-cache as 157a "git-export as tree" function. Just read the desired tree into the 158index, and do a 159 160 git-checkout-cache --prefix=git-export-dir/ -a 161 162and git-checkout-cache will "git-export" the cache into the specified 163directory. 164 165NOTE! The final "/" is important. The git-exported name is literally just 166prefixed with the specified string, so you can also do something like 167 168 git-checkout-cache --prefix=.merged- Makefile 169 170to check out the currently cached copy of "Makefile" into the file 171".merged-Makefile". 172 173 174################################################################ 175git-commit-tree 176 git-commit-tree <tree> [-p <parent commit>]* < changelog 177 178Creates a new commit object based on the provided tree object and 179emits the new commit object id on stdout. If no parent is given then 180it is considered to be an initial tree. 181 182A commit object usually has 1 parent (a commit after a change) or up 183to 16 parents. More than one parent represents a merge of branches 184that led to them. 185 186While a tree represents a particular directory state of a working 187directory, a commit represents that state in "time", and explains how 188to get there. 189 190Normally a commit would identify a new "HEAD" state, and while git 191doesn't care where you save the note about that state, in practice we 192tend to just write the result to the file ".git/HEAD", so that we can 193always see what the last committed state was. 194 195Options 196 197<tree> 198 An existing tree object 199 200-p <parent commit> 201 Each -p indicates a the id of a parent commit object. 202 203 204Commit Information 205 206A commit encapsulates: 207 all parent object ids 208 author name, email and date 209 committer name and email and the commit time. 210 211If not provided, git-commit-tree uses your name, hostname and domain to 212provide author and committer info. This can be overridden using the 213following environment variables. 214 AUTHOR_NAME 215 AUTHOR_EMAIL 216 AUTHOR_DATE 217 COMMIT_AUTHOR_NAME 218 COMMIT_AUTHOR_EMAIL 219(nb <,> and '\n's are stripped) 220 221A commit comment is read from stdin (max 999 chars). If a changelog 222entry is not provided via '<' redirection, git-commit-tree will just wait 223for one to be entered and terminated with ^D 224 225see also: git-write-tree 226 227 228################################################################ 229git-diff-cache 230 git-diff-cache [-p] [-r] [-z] [--cached] <tree-ish> 231 232Compares the content and mode of the blobs found via a tree object 233with the content of the current cache and, optionally ignoring the 234stat state of the file on disk. 235 236<tree-ish> 237 The id of a tree object to diff against. 238 239-p 240 Generate patch (see section on generating patches) 241 242-r 243 This flag does not mean anything. It is there only to match 244 git-diff-tree. Unlike git-diff-tree, git-diff-cache always looks 245 at all the subdirectories. 246 247-z 248 \0 line termination on output 249 250--cached 251 do not consider the on-disk file at all 252 253Output format: 254 255See "Output format from git-diff-cache, git-diff-tree and git-diff-files" 256section. 257 258Operating Modes 259 260You can choose whether you want to trust the index file entirely 261(using the "--cached" flag) or ask the diff logic to show any files 262that don't match the stat state as being "tentatively changed". Both 263of these operations are very useful indeed. 264 265Cached Mode 266 267If --cached is specified, it allows you to ask: 268 269 show me the differences between HEAD and the current index 270 contents (the ones I'd write with a "git-write-tree") 271 272For example, let's say that you have worked on your index file, and are 273ready to commit. You want to see eactly _what_ you are going to commit is 274without having to write a new tree object and compare it that way, and to 275do that, you just do 276 277 git-diff-cache --cached $(cat .git/HEAD) 278 279Example: let's say I had renamed "commit.c" to "git-commit.c", and I had 280done an "git-update-cache" to make that effective in the index file. 281"git-diff-files" wouldn't show anything at all, since the index file 282matches my working directory. But doing a git-diff-cache does: 283 284 torvalds@ppc970:~/git> git-diff-cache --cached $(cat .git/HEAD) 285 -100644 blob 4161aecc6700a2eb579e842af0b7f22b98443f74 commit.c 286 +100644 blob 4161aecc6700a2eb579e842af0b7f22b98443f74 git-commit.c 287 288You can trivially see that the above is a rename. 289 290In fact, "git-diff-cache --cached" _should_ always be entirely equivalent to 291actually doing a "git-write-tree" and comparing that. Except this one is much 292nicer for the case where you just want to check where you are. 293 294So doing a "git-diff-cache --cached" is basically very useful when you are 295asking yourself "what have I already marked for being committed, and 296what's the difference to a previous tree". 297 298Non-cached Mode 299 300The "non-cached" mode takes a different approach, and is potentially the 301even more useful of the two in that what it does can't be emulated with a 302"git-write-tree + git-diff-tree". Thus that's the default mode. The 303non-cached version asks the question 304 305 "show me the differences between HEAD and the currently checked out 306 tree - index contents _and_ files that aren't up-to-date" 307 308which is obviously a very useful question too, since that tells you what 309you _could_ commit. Again, the output matches the "git-diff-tree -r" 310output to a tee, but with a twist. 311 312The twist is that if some file doesn't match the cache, we don't have a 313backing store thing for it, and we use the magic "all-zero" sha1 to show 314that. So let's say that you have edited "kernel/sched.c", but have not 315actually done an git-update-cache on it yet - there is no "object" associated 316with the new state, and you get: 317 318 torvalds@ppc970:~/v2.6/linux> git-diff-cache $(cat .git/HEAD ) 319 *100644->100664 blob 7476bb......->000000...... kernel/sched.c 320 321ie it shows that the tree has changed, and that "kernel/sched.c" has is 322not up-to-date and may contain new stuff. The all-zero sha1 means that to 323get the real diff, you need to look at the object in the working directory 324directly rather than do an object-to-object diff. 325 326NOTE! As with other commands of this type, "git-diff-cache" does not 327actually look at the contents of the file at all. So maybe 328"kernel/sched.c" hasn't actually changed, and it's just that you touched 329it. In either case, it's a note that you need to upate-cache it to make 330the cache be in sync. 331 332NOTE 2! You can have a mixture of files show up as "has been updated" and 333"is still dirty in the working directory" together. You can always tell 334which file is in which state, since the "has been updated" ones show a 335valid sha1, and the "not in sync with the index" ones will always have the 336special all-zero sha1. 337 338################################################################ 339git-diff-tree 340 git-diff-tree [-p] [-r] [-z] <tree-ish> <tree-ish> [<pattern>]* 341 342Compares the content and mode of the blobs found via two tree objects. 343 344Note that git-diff-tree can use the tree encapsulated in a commit object. 345 346<tree-ish> 347 The id of a tree object. 348 349<pattern> 350 If provided, the results are limited to a subset of files 351 matching one of these prefix strings. 352 ie file matches /^<pattern1>|<pattern2>|.../ 353 Note that pattern does not provide any wildcard or regexp 354 features. 355 356-p 357 generate patch (see section on generating patches). For 358 git-diff-tree, this flag implies -r as well. 359 360-r 361 recurse 362 363-z 364 \0 line termination on output 365 366Limiting Output 367 368If you're only interested in differences in a subset of files, for 369example some architecture-specific files, you might do: 370 371 git-diff-tree -r <tree-ish> <tree-ish> arch/ia64 include/asm-ia64 372 373and it will only show you what changed in those two directories. 374 375Or if you are searching for what changed in just kernel/sched.c, just do 376 377 git-diff-tree -r <tree-ish> <tree-ish> kernel/sched.c 378 379and it will ignore all differences to other files. 380 381The pattern is always the prefix, and is matched exactly. There are no 382wildcards. Even stricter, it has to match complete path comonent. 383I.e. "foo" does not pick up "foobar.h". "foo" does match "foo/bar.h" 384so it can be used to name subdirectories. 385 386Output format: 387 388See "Output format from git-diff-cache, git-diff-tree and git-diff-files" 389section. 390 391An example of normal usage is: 392 393 torvalds@ppc970:~/git> git-diff-tree 5319e4...... 394 *100664->100664 blob ac348b.......->a01513....... git-fsck-cache.c 395 396which tells you that the last commit changed just one file (it's from 397this one: 398 399 commit 3c6f7ca19ad4043e9e72fa94106f352897e651a8 400 tree 5319e4d609cdd282069cc4dce33c1db559539b03 401 parent b4e628ea30d5ab3606119d2ea5caeab141d38df7 402 author Linus Torvalds <torvalds@ppc970.osdl.org> Sat Apr 9 12:02:30 2005 403 committer Linus Torvalds <torvalds@ppc970.osdl.org> Sat Apr 9 12:02:30 2005 404 405 Make "git-fsck-cache" print out all the root commits it finds. 406 407 Once I do the reference tracking, I'll also make it print out all the 408 HEAD commits it finds, which is even more interesting. 409 410in case you care). 411 412################################################################ 413git-diff-tree-helper 414 git-diff-tree-helper [-z] [-R] 415 416Reads output from git-diff-cache, git-diff-tree and git-diff-files and 417generates patch format output. 418 419-z 420 \0 line termination on input 421 422-R 423 Output diff in reverse. This is useful for displaying output from 424 git-diff-cache which always compares tree with cache or working 425 file. E.g. 426 427 git-diff-cache <tree> | git-diff-tree-helper -R file.c 428 429 would show a diff to bring the working file back to what is in the 430 <tree>. 431 432See also the section on generating patches. 433 434################################################################ 435git-fsck-cache 436 git-fsck-cache [--tags] [--root] [[--unreachable] [--cache] <object>*] 437 438Verifies the connectivity and validity of the objects in the database. 439 440<object> 441 An object to treat as the head of an unreachability trace. 442 443--unreachable 444 Print out objects that exist but that aren't readable from any 445 of the specified head nodes. 446 447--root 448 Report root nodes. 449 450--tags 451 Report tags. 452 453--cache 454 Consider any object recorded in the cache also as a head node for 455 an unreachability trace. 456 457It tests SHA1 and general object sanity, and it does full tracking of 458the resulting reachability and everything else. It prints out any 459corruption it finds (missing or bad objects), and if you use the 460"--unreachable" flag it will also print out objects that exist but 461that aren't readable from any of the specified head nodes. 462 463So for example 464 465 git-fsck-cache --unreachable $(cat .git/HEAD) 466 467or, for Cogito users: 468 469 git-fsck-cache --unreachable $(cat .git/refs/heads/*) 470 471will do quite a _lot_ of verification on the tree. There are a few 472extra validity tests to be added (make sure that tree objects are 473sorted properly etc), but on the whole if "git-fsck-cache" is happy, you 474do have a valid tree. 475 476Any corrupt objects you will have to find in backups or other archives 477(ie you can just remove them and do an "rsync" with some other site in 478the hopes that somebody else has the object you have corrupted). 479 480Of course, "valid tree" doesn't mean that it wasn't generated by some 481evil person, and the end result might be crap. Git is a revision 482tracking system, not a quality assurance system ;) 483 484Extracted Diagnostics 485 486expect dangling commits - potential heads - due to lack of head information 487 You haven't specified any nodes as heads so it won't be 488 possible to differentiate between un-parented commits and 489 root nodes. 490 491missing sha1 directory '<dir>' 492 The directory holding the sha1 objects is missing. 493 494unreachable <type> <object> 495 The <type> object <object>, isn't actually referred to directly 496 or indirectly in any of the trees or commits seen. This can 497 mean that there's another root na SHA1_ode that you're not specifying 498 or that the tree is corrupt. If you haven't missed a root node 499 then you might as well delete unreachable nodes since they 500 can't be used. 501 502missing <type> <object> 503 The <type> object <object>, is referred to but isn't present in 504 the database. 505 506dangling <type> <object> 507 The <type> object <object>, is present in the database but never 508 _directly_ used. A dangling commit could be a root node. 509 510warning: git-fsck-cache: tree <tree> has full pathnames in it 511 And it shouldn't... 512 513sha1 mismatch <object> 514 The database has an object who's sha1 doesn't match the 515 database value. 516 This indicates a ??serious?? data integrity problem. 517 (note: this error occured during early git development when 518 the database format changed.) 519 520Environment Variables 521 522SHA1_FILE_DIRECTORY 523 used to specify the object database root (usually .git/objects) 524 525GIT_INDEX_FILE 526 used to specify the cache 527 528################################################################ 529git-export 530 git-export top [base] 531 532Exports each commit and diff against each of its parents, between 533top and base. If base is not specified it exports everything. 534 535 536################################################################ 537git-init-db 538 git-init-db 539 540This simply creates an empty git object database - basically a .git 541directory and .git/object/??/ directories. 542 543If the object storage directory is specified via the SHA1_FILE_DIRECTORY 544environment variable then the sha1 directories are created underneath - 545otherwise the default .git/objects directory is used. 546 547git-init-db won't hurt an existing repository. 548 549 550################################################################ 551git-ls-tree 552 git-ls-tree [-r] [-z] <tree-ish> 553 554Converts the tree object to a human readable (and script processable) 555form. 556 557<tree-ish> 558 Id of a tree. 559 560-r 561 recurse into sub-trees 562 563-z 564 \0 line termination on output 565 566Output Format 567<mode>\t <type>\t <object>\t <file> 568 569 570################################################################ 571git-merge-base 572 git-merge-base <commit> <commit> 573 574git-merge-base finds as good a common ancestor as possible. Given a 575selection of equally good common ancestors it should not be relied on 576to decide in any particular way. 577 578The git-merge-base algorithm is still in flux - use the source... 579 580 581################################################################ 582git-merge-cache 583 git-merge-cache <merge-program> (-a | -- | <file>*) 584 585This looks up the <file>(s) in the cache and, if there are any merge 586entries, passes the SHA1 hash for those files as arguments 1, 2, 3 (empty 587argument if no file), and <file> as argument 4. File modes for the three 588files are passed as arguments 5, 6 and 7. 589 590-- 591 Interpret all future arguments as filenames. 592 593-a 594 Run merge against all files in the cache that need merging. 595 596If git-merge-cache is called with multiple <file>s (or -a) then it 597processes them in turn only stopping if merge returns a non-zero exit 598code. 599 600Typically this is run with the a script calling the merge command from 601the RCS package. 602 603A sample script called git-merge-one-file-script is included in the 604ditribution. 605 606ALERT ALERT ALERT! The git "merge object order" is different from the 607RCS "merge" program merge object order. In the above ordering, the 608original is first. But the argument order to the 3-way merge program 609"merge" is to have the original in the middle. Don't ask me why. 610 611Examples: 612 613 torvalds@ppc970:~/merge-test> git-merge-cache cat MM 614 This is MM from the original tree. # original 615 This is modified MM in the branch A. # merge1 616 This is modified MM in the branch B. # merge2 617 This is modified MM in the branch B. # current contents 618 619or 620 621 torvalds@ppc970:~/merge-test> git-merge-cache cat AA MM 622 cat: : No such file or directory 623 This is added AA in the branch A. 624 This is added AA in the branch B. 625 This is added AA in the branch B. 626 fatal: merge program failed 627 628where the latter example shows how "git-merge-cache" will stop trying to 629merge once anything has returned an error (ie "cat" returned an error 630for the AA file, because it didn't exist in the original, and thus 631"git-merge-cache" didn't even try to merge the MM thing). 632 633 634################################################################ 635git-read-tree 636 git-read-tree (<tree-ish> | -m <tree-ish1> [<tree-ish2> <tree-ish3>])" 637 638Reads the tree information given by <tree> into the directory cache, 639but does not actually _update_ any of the files it "caches". (see: 640git-checkout-cache) 641 642Optionally, it can merge a tree into the cache or perform a 3-way 643merge. 644 645Trivial merges are done by git-read-tree itself. Only conflicting paths 646will be in unmerged state when git-read-tree returns. 647 648-m 649 Perform a merge, not just a read 650 651<tree-ish#> 652 The id of the tree object(s) to be read/merged. 653 654 655Merging 656If -m is specified, git-read-tree performs 2 kinds of merge, a single tree 657merge if only 1 tree is given or a 3-way merge if 3 trees are 658provided. 659 660Single Tree Merge 661If only 1 tree is specified, git-read-tree operates as if the user did not 662specify "-m", except that if the original cache has an entry for a 663given pathname; and the contents of the path matches with the tree 664being read, the stat info from the cache is used. (In other words, the 665cache's stat()s take precedence over the merged tree's) 666 667That means that if you do a "git-read-tree -m <newtree>" followed by a 668"git-checkout-cache -f -a", the git-checkout-cache only checks out the stuff 669that really changed. 670 671This is used to avoid unnecessary false hits when git-diff-files is 672run after git-read-tree. 673 6743-Way Merge 675Each "index" entry has two bits worth of "stage" state. stage 0 is the 676normal one, and is the only one you'd see in any kind of normal use. 677 678However, when you do "git-read-tree" with three trees, the "stage" 679starts out at 1. 680 681This means that you can do 682 683 git-read-tree -m <tree1> <tree2> <tree3> 684 685and you will end up with an index with all of the <tree1> entries in 686"stage1", all of the <tree2> entries in "stage2" and all of the 687<tree3> entries in "stage3". 688 689Furthermore, "git-read-tree" has special-case logic that says: if you see 690a file that matches in all respects in the following states, it 691"collapses" back to "stage0": 692 693 - stage 2 and 3 are the same; take one or the other (it makes no 694 difference - the same work has been done on stage 2 and 3) 695 696 - stage 1 and stage 2 are the same and stage 3 is different; take 697 stage 3 (some work has been done on stage 3) 698 699 - stage 1 and stage 3 are the same and stage 2 is different take 700 stage 2 (some work has been done on stage 2) 701 702The git-write-tree command refuses to write a nonsensical tree, and it 703will complain about unmerged entries if it sees a single entry that is not 704stage 0. 705 706Ok, this all sounds like a collection of totally nonsensical rules, 707but it's actually exactly what you want in order to do a fast 708merge. The different stages represent the "result tree" (stage 0, aka 709"merged"), the original tree (stage 1, aka "orig"), and the two trees 710you are trying to merge (stage 2 and 3 respectively). 711 712In fact, the way "git-read-tree" works, it's entirely agnostic about how 713you assign the stages, and you could really assign them any which way, 714and the above is just a suggested way to do it (except since 715"git-write-tree" refuses to write anything but stage0 entries, it makes 716sense to always consider stage 0 to be the "full merge" state). 717 718So what happens? Try it out. Select the original tree, and two trees 719to merge, and look how it works: 720 721 - if a file exists in identical format in all three trees, it will 722 automatically collapse to "merged" state by the new git-read-tree. 723 724 - a file that has _any_ difference what-so-ever in the three trees 725 will stay as separate entries in the index. It's up to "script 726 policy" to determine how to remove the non-0 stages, and insert a 727 merged version. But since the index is always sorted, they're easy 728 to find: they'll be clustered together. 729 730 - the index file saves and restores with all this information, so you 731 can merge things incrementally, but as long as it has entries in 732 stages 1/2/3 (ie "unmerged entries") you can't write the result. 733 734So now the merge algorithm ends up being really simple: 735 736 - you walk the index in order, and ignore all entries of stage 0, 737 since they've already been done. 738 739 - if you find a "stage1", but no matching "stage2" or "stage3", you 740 know it's been removed from both trees (it only existed in the 741 original tree), and you remove that entry. - if you find a 742 matching "stage2" and "stage3" tree, you remove one of them, and 743 turn the other into a "stage0" entry. Remove any matching "stage1" 744 entry if it exists too. .. all the normal trivial rules .. 745 746Incidentally - it also means that you don't even have to have a separate 747subdirectory for this. All the information literally is in the index file, 748which is a temporary thing anyway. There is no need to worry about what is 749in the working directory, since it is never shown and never used. 750 751see also: 752git-write-tree 753git-ls-files 754 755 756################################################################ 757git-rev-list <commit> 758 759Lists commit objects in reverse chronological order starting at the 760given commit, taking ancestry relationship into account. This is 761useful to produce human-readable log output. 762 763 764################################################################ 765git-rev-tree 766 git-rev-tree [--edges] [--cache <cache-file>] [^]<commit> [[^]<commit>] 767 768Provides the revision tree for one or more commits. 769 770--edges 771 Show edges (ie places where the marking changes between parent 772 and child) 773 774--cache <cache-file> 775 Use the specified file as a cache from a previous git-rev-list run 776 to speed things up. Note that this "cache" is totally different 777 concept from the directory index. Also this option is not 778 implemented yet. 779 780[^]<commit> 781 The commit id to trace (a leading caret means to ignore this 782 commit-id and below) 783 784Output: 785<date> <commit>:<flags> [<parent-commit>:<flags> ]* 786 787<date> 788 Date in 'seconds since epoch' 789 790<commit> 791 id of commit object 792 793<parent-commit> 794 id of each parent commit object (>1 indicates a merge) 795 796<flags> 797 798 The flags are read as a bitmask representing each commit 799 provided on the commandline. eg: given the command: 800 801 $ git-rev-tree <com1> <com2> <com3> 802 803 The output: 804 805 <date> <commit>:5 806 807 means that <commit> is reachable from <com1>(1) and <com3>(4) 808 809A revtree can get quite large. git-rev-tree will eventually allow you to 810cache previous state so that you don't have to follow the whole thing 811down. 812 813So the change difference between two commits is literally 814 815 git-rev-tree [commit-id1] > commit1-revtree 816 git-rev-tree [commit-id2] > commit2-revtree 817 join -t : commit1-revtree commit2-revtree > common-revisions 818 819(this is also how to find the most common parent - you'd look at just 820the head revisions - the ones that aren't referred to by other 821revisions - in "common-revision", and figure out the best one. I 822think.) 823 824 825################################################################ 826git-diff-files 827 git-diff-files [-p] [-q] [-r] [-z] [<pattern>...] 828 829Compares the files in the working tree and the cache. When paths 830are specified, compares only those named paths. Otherwise all 831entries in the cache are compared. The output format is the 832same as git-diff-cache and git-diff-tree. 833 834-p 835 generate patch (see section on generating patches). 836 837-q 838 Remain silent even on nonexisting files 839 840-r 841 This flag does not mean anything. It is there only to match 842 git-diff-tree. Unlike git-diff-tree, git-diff-files always looks 843 at all the subdirectories. 844 845 846Output format: 847 848See "Output format from git-diff-cache, git-diff-tree and git-diff-files" 849section. 850 851 852################################################################ 853git-ls-files 854 git-ls-files [-z] [-t] 855 (--[cached|deleted|others|ignored|stage|unmerged])* 856 (-[c|d|o|i|s|u])* 857 [-x <pattern>|--exclude=<pattern>] 858 [-X <file>|--exclude-from=<file>] 859 860This merges the file listing in the directory cache index with the 861actual working directory list, and shows different combinations of the 862two. 863 864One or more of the options below may be used to determine the files 865shown: 866 867-c|--cached 868 Show cached files in the output (default) 869 870-d|--deleted 871 Show deleted files in the output 872 873-o|--others 874 Show other files in the output 875 876-i|--ignored 877 Show ignored files in the output 878 Note the this also reverses any exclude list present. 879 880-s|--stage 881 Show stage files in the output 882 883-u|--unmerged 884 Show unmerged files in the output (forces --stage) 885 886-z 887 \0 line termination on output 888 889-x|--exclude=<pattern> 890 Skips files matching pattern. 891 Note that pattern is a shell wildcard pattern. 892 893-X|--exclude-from=<file> 894 exclude patterns are read from <file>; 1 per line. 895 Allows the use of the famous dontdiff file as follows to find 896 out about uncommitted files just as dontdiff is used with 897 the diff command: 898 git-ls-files --others --exclude-from=dontdiff 899 900Output 901show files just outputs the filename unless --stage is specified in 902which case it outputs: 903 904[<tag> ]<mode> <object> <stage> <file> 905 906git-ls-files --unmerged" and "git-ls-files --stage " can be used to examine 907detailed information on unmerged paths. 908 909For an unmerged path, instead of recording a single mode/SHA1 pair, 910the dircache records up to three such pairs; one from tree O in stage 9111, A in stage 2, and B in stage 3. This information can be used by 912the user (or Cogito) to see what should eventually be recorded at the 913path. (see read-cache for more information on state) 914 915see also: 916read-cache 917 918 919################################################################ 920git-unpack-file 921 git-unpack-file <blob> 922 923Creates a file holding the contents of the blob specified by sha1. It 924returns the name of the temporary file in the following format: 925 .merge_file_XXXXX 926 927<blob> 928 Must be a blob id 929 930################################################################ 931git-update-cache 932 git-update-cache 933 [--add] [--remove] [--refresh] 934 [--ignore-missing] 935 [--force-remove <file>] 936 [--cacheinfo <mode> <object> <file>]* 937 [--] [<file>]* 938 939Modifies the index or directory cache. Each file mentioned is updated 940into the cache and any 'unmerged' or 'needs updating' state is 941cleared. 942 943The way git-update-cache handles files it is told about can be modified 944using the various options: 945 946--add 947 If a specified file isn't in the cache already then it's 948 added. 949 Default behaviour is to ignore new files. 950 951--remove 952 If a specified file is in the cache but is missing then it's 953 removed. 954 Default behaviour is to ignore removed file. 955 956--refresh 957 Looks at the current cache and checks to see if merges or 958 updates are needed by checking stat() information. 959 960--ignore-missing 961 Ignores missing files during a --refresh 962 963--cacheinfo <mode> <object> <path> 964 Directly insert the specified info into the cache. 965 966--force-remove 967 Remove the file from the index even when the working directory 968 still has such a file. 969 970-- 971 Do not interpret any more arguments as options. 972 973<file> 974 Files to act on. 975 Note that files begining with '.' are discarded. This includes 976 "./file" and "dir/./file". If you don't want this, then use 977 cleaner names. 978 The same applies to directories ending '/' and paths with '//' 979 980Using --refresh 981--refresh does not calculate a new sha1 file or bring the cache 982up-to-date for mode/content changes. But what it _does_ do is to 983"re-match" the stat information of a file with the cache, so that you 984can refresh the cache for a file that hasn't been changed but where 985the stat entry is out of date. 986 987For example, you'd want to do this after doing a "git-read-tree", to link 988up the stat cache details with the proper files. 989 990Using --cacheinfo 991--cacheinfo is used to register a file that is not in the current 992working directory. This is useful for minimum-checkout merging. 993 994To pretend you have a file with mode and sha1 at path, say: 995 996 $ git-update-cache --cacheinfo mode sha1 path 997 998To update and refresh only the files already checked out: 9991000 git-checkout-cache -n -f -a && git-update-cache --ignore-missing --refresh100110021003################################################################1004git-write-tree1005 git-write-tree10061007Creates a tree object using the current cache.10081009The cache must be merged.10101011Conceptually, git-write-tree sync()s the current directory cache contents1012into a set of tree files.1013In order to have that match what is actually in your directory right1014now, you need to have done a "git-update-cache" phase before you did the1015"git-write-tree".101610171018################################################################10191020Output format from git-diff-cache, git-diff-tree and git-diff-files.10211022These commands all compare two sets of things; what are1023compared are different:10241025 git-diff-cache <tree-ish>10261027 compares the <tree-ish> and the files on the filesystem.10281029 git-diff-cache --cached <tree-ish>10301031 compares the <tree-ish> and the cache.10321033 git-diff-tree [-r] <tree-ish-1> <tree-ish-2> [<pattern>...]10341035 compares the trees named by the two arguments.10361037 git-diff-files [<pattern>...]10381039 compares the cache and the files on the filesystem.10401041The following desription uses "old" and "new" to mean those1042compared entities.10431044For files in old but not in new (i.e. removed):1045-<mode> \t <type> \t <object> \t <path>10461047For files not in old but in new (i.e. added):1048+<mode> \t <type> \t <object> \t <path>10491050For files that differ:1051*<old-mode>-><new-mode> \t <type> \t <old-sha1>-><new-sha1> \t <path>10521053<new-sha1> is shown as all 0's if new is a file on the1054filesystem and it is out of sync with the cache. Example:10551056 *100644->100644 blob 5be4a4.......->000000....... file.c10571058################################################################10591060Generating patches10611062When git-diff-cache, git-diff-tree, or git-diff-files are run with a -p1063option, they do not produce the output described in "Output format from1064git-diff-cache, git-diff-tree and git-diff-files" section. It instead1065produces a patch file.10661067The patch generation can be customized at two levels. This1068customization also applies to git-diff-tree-helper.106910701. When the environment variable GIT_EXTERNAL_DIFF is not set,1071 these commands internally invoke diff like this:10721073 diff -L a/<path> -L a/<path> -pu <old> <new>10741075 For added files, /dev/null is used for <old>. For removed1076 files, /dev/null is used for <new>10771078 The diff formatting options can be customized via the1079 environment variable GIT_DIFF_OPTS. For example, if you1080 prefer context diff:10811082 GIT_DIFF_OPTS=-c git-diff-cache -p $(cat .git/HEAD)1083108410852. When the environment variable GIT_EXTERNAL_DIFF is set, the1086 program named by it is called, instead of the diff invocation1087 described above.10881089 For a path that is added, removed, or modified,1090 GIT_EXTERNAL_DIFF is called with 7 parameters:10911092 path old-file old-hex old-mode new-file new-hex new-mode10931094 where1095 <old|new>-file are files GIT_EXTERNAL_DIFF can use to read the1096 contents of <old|ne>,1097 <old|new>-hex are the 40-hexdigit SHA1 hashes,1098 <old|new>-mode are the octal representation of the file modes.10991100 The file parameters can point at the user's working file (e.g. new-file1101 in git-diff-files), /dev/null (e.g. old-file when a new file is added),1102 or a temporary file (e.g. old-file in the cache). GIT_EXTERNAL_DIFF1103 should not worry about unlinking the temporary file --- it is removed1104 when GIT_EXTERNAL_DIFF exits.11051106 For a path that is unmerged, GIT_EXTERNAL_DIFF is called with1107 1 parameter, path.11081109################################################################11101111Terminology: - see README for description1112Each line contains terms used interchangeably11131114object database, .git directory1115directory cache, index1116id, sha1, sha1-id, sha1 hash1117type, tag1118blob, blob object1119tree, tree object1120commit, commit object1121parent1122root object1123changeset112411251126git Environment Variables1127AUTHOR_NAME1128AUTHOR_EMAIL1129AUTHOR_DATE1130COMMIT_AUTHOR_NAME1131COMMIT_AUTHOR_EMAIL1132GIT_DIFF_OPTS1133GIT_EXTERNAL_DIFF1134GIT_INDEX_FILE1135SHA1_FILE_DIRECTORY