Skip to content
Snippets Groups Projects
git-rev-list.txt 3.15 KiB
Newer Older
  • Learn to ignore specific revisions
  • Jean-Noël Avila's avatar
    Jean-Noël Avila committed
    git-rev-list(1)
    ===============
    
    NAME
    ----
    git-rev-list - Lists commit objects in reverse chronological order
    
    
    SYNOPSIS
    --------
    [verse]
    
    Jean-Noël Avila's avatar
    Jean-Noël Avila committed
    'git rev-list' [<options>] <commit>... [--] [<path>...]
    
    Jean-Noël Avila's avatar
    Jean-Noël Avila committed
    
    DESCRIPTION
    -----------
    
    
    :git-rev-list: 1
    include::rev-list-description.txt[]
    
    Jean-Noël Avila's avatar
    Jean-Noël Avila committed
    
    '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[]
    
    
    Jean-Noël Avila's avatar
    Jean-Noël Avila committed
    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
    ----------
    
    
    Jean-Noël Avila's avatar
    Jean-Noël Avila committed
    GIT
    ---
    Part of the linkgit:git[1] suite