summaryrefslogtreecommitdiff
path: root/Documentation/git-rev-list.txt
blob: 20bb8e82176b89cbbe68403301a43848b2bef912 (plain)
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 a very 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 enables 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