1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
|
git-rev-list(1)
===============
NAME
----
git-rev-list - Lists commit objects in reverse chronological order
SYNOPSIS
--------
[verse]
'git rev-list' [<options>] <commit>... [--] [<path>...]
DESCRIPTION
-----------
:git-rev-list: 1
include::rev-list-description.txt[]
'rev-list' is an essential Git command, since it
provides the ability to build and traverse commit ancestry graphs. For
this reason, it has a lot of different options that enable it to be
used by commands as different as 'git bisect' and
'git repack'.
OPTIONS
-------
:git-rev-list: 1
include::rev-list-options.txt[]
include::pretty-formats.txt[]
EXAMPLES
--------
* Print the list of commits reachable from the current branch.
+
----------
git rev-list HEAD
----------
* Print the list of commits on this branch, but not present in the
upstream branch.
+
----------
git rev-list @{upstream}..HEAD
----------
* Format commits with their author and commit message (see also the
porcelain linkgit:git-log[1]).
+
----------
git rev-list --format=medium HEAD
----------
* Format commits along with their diffs (see also the porcelain
linkgit:git-log[1], which can do this in a single process).
+
----------
git rev-list HEAD |
git diff-tree --stdin --format=medium -p
----------
* Print the list of commits on the current branch that touched any
file in the `Documentation` directory.
+
----------
git rev-list HEAD -- Documentation/
----------
* Print the list of commits authored by you in the past year, on
any branch, tag, or other ref.
+
----------
git rev-list --author=you@example.com --since=1.year.ago --all
----------
* Print the list of objects reachable from the current branch (i.e., all
commits and the blobs and trees they contain).
+
----------
git rev-list --objects HEAD
----------
* Compare the disk size of all reachable objects, versus those
reachable from reflogs, versus the total packed size. This can tell
you whether running `git repack -ad` might reduce the repository size
(by dropping unreachable objects), and whether expiring reflogs might
help.
+
----------
# reachable objects
git rev-list --disk-usage --objects --all
# plus reflogs
git rev-list --disk-usage --objects --all --reflog
# total disk size used
du -c .git/objects/pack/*.pack .git/objects/??/*
# alternative to du: add up "size" and "size-pack" fields
git count-objects -v
----------
* Report the disk size of each branch, not including objects used by the
current branch. This can find outliers that are contributing to a
bloated repository size (e.g., because somebody accidentally committed
large build artifacts).
+
----------
git for-each-ref --format='%(refname)' |
while read branch
do
size=$(git rev-list --disk-usage --objects HEAD..$branch)
echo "$size $branch"
done |
sort -n
----------
* Compare the on-disk size of branches in one group of refs, excluding
another. If you co-mingle objects from multiple remotes in a single
repository, this can show which remotes are contributing to the
repository size (taking the size of `origin` as a baseline).
+
----------
git rev-list --disk-usage --objects --remotes=$suspect --not --remotes=origin
----------
GIT
---
Part of the linkgit:git[1] suite
|