projects:progit:inspection
Table of Contents
Inspecting Git repository
The Three Main States
State | Location | Description | Method of inspection |
---|---|---|---|
Commited | .git directory | Stored in DB | git log git show … |
Modified | Working directory | Changed | git status git diff |
Staged | Staging area (.git/index) | Changed and marked for next commit to the DB | git status |
Staging area has many names:
- Index
- Cache
- Directory cache
- Current directory cache
- Staging area
- Staged files
Revision
There are many ways to distinguish a specific commit from Git repository.
SHA
(hash) - The SHA-1 algorithm is used to create a unique 40-byte hexadecimal string in many corners of git. The SHA (hash-object cat-file)- (refnames, refs)
Branch reference
(heads) - Branches in Git are nothing more than pointers to the commit. Branch reference is a SHA value of the most recent commit and it is updated with each new commit added. (show rev-parse show-ref)Tag reference
- Similar to Branch reference but does not change with new commits. (git describe)HEAD
(@
) - Note the capital letters. Points to the current commit. (git describe)Other
like FETCH_HEAD, MERGE_HEAD, CHERRY_PICK_HEAD, ORIG_HEAD<refname>@{<date>}
- For examplemaster@{yesterday}
,HEAD@{5 minutes ago}
. Note: Date parsing is undocumented but the parser code can be accessed on github.<refname>@{n}
- For examplemaster@{7}
returns 7th prior commit from master head.<refname>@{-n}
- For example@{-2}
returns 2nd commit checked out before current one.<branchname>@{upstream}
git rev-parse –symbolic-full-name @{u}
<rev>^n
<rev>~n
- more …
Walking the tree with ''^'' and ''~''
A = = A^0 B = A^ = A^1 = A~1 C = A^2 = A^2 D = A^^ = A^1^1 = A~2 E = B^2 = A^^2 F = B^3 = A^^3 G = A^^^ = A^1^1^1 = A~3 H = D^2 = B^^2 = A^^^2 = A~2^2 I = F^ = B^3^ = A^^3^ J = F^2 = B^3^2 = A^^3^2
Tree
Range
<rev>
- ancestors of commit revision^<rev>
<rev1>..<rev2>
- reachable from rev2 but exclude reachable from rev1 (none is HEAD)<rev1>…<rev2>
- reachable from either but not both (none is HEAD)- more …
Reflog
“Log of references” - list of updates to the references
git reflog
Diff
Show difference between working directory (or index if –cached
) and commited.
Merge-Base
Debugging with Git
blame | Line-by-line who last modified line |
grep | Search files for given expression |
bisect | Manually switch between commits until the one that introduces a chenge is found |
References
projects/progit/inspection.txt · Last modified: 2016/02/21 21:28 by mkucia