62 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
			
		
		
	
	
			62 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
| List commits that are reachable by following the `parent` links from the
 | |
| given commit(s), but exclude commits that are reachable from the one(s)
 | |
| given with a '{caret}' in front of them.  The output is given in reverse
 | |
| chronological order by default.
 | |
| 
 | |
| You can think of this as a set operation. Commits reachable from any of
 | |
| the commits given on the command line form a set, and then commits reachable
 | |
| from any of the ones given with '{caret}' in front are subtracted from that
 | |
| set.  The remaining commits are what comes out in the command's output.
 | |
| Various other options and paths parameters can be used to further limit the
 | |
| result.
 | |
| 
 | |
| Thus, the following command:
 | |
| 
 | |
| ifdef::git-rev-list[]
 | |
| -----------------------------------------------------------------------
 | |
| $ git rev-list foo bar ^baz
 | |
| -----------------------------------------------------------------------
 | |
| endif::git-rev-list[]
 | |
| ifdef::git-log[]
 | |
| -----------------------------------------------------------------------
 | |
| $ git log foo bar ^baz
 | |
| -----------------------------------------------------------------------
 | |
| endif::git-log[]
 | |
| 
 | |
| means "list all the commits which are reachable from 'foo' or 'bar', but
 | |
| not from 'baz'".
 | |
| 
 | |
| A special notation "'<commit1>'..'<commit2>'" can be used as a
 | |
| short-hand for "^'<commit1>' '<commit2>'". For example, either of
 | |
| the following may be used interchangeably:
 | |
| 
 | |
| ifdef::git-rev-list[]
 | |
| -----------------------------------------------------------------------
 | |
| $ git rev-list origin..HEAD
 | |
| $ git rev-list HEAD ^origin
 | |
| -----------------------------------------------------------------------
 | |
| endif::git-rev-list[]
 | |
| ifdef::git-log[]
 | |
| -----------------------------------------------------------------------
 | |
| $ git log origin..HEAD
 | |
| $ git log HEAD ^origin
 | |
| -----------------------------------------------------------------------
 | |
| endif::git-log[]
 | |
| 
 | |
| Another special notation is "'<commit1>'...'<commit2>'" which is useful
 | |
| for merges.  The resulting set of commits is the symmetric difference
 | |
| between the two operands.  The following two commands are equivalent:
 | |
| 
 | |
| ifdef::git-rev-list[]
 | |
| -----------------------------------------------------------------------
 | |
| $ git rev-list A B --not $(git merge-base --all A B)
 | |
| $ git rev-list A...B
 | |
| -----------------------------------------------------------------------
 | |
| endif::git-rev-list[]
 | |
| ifdef::git-log[]
 | |
| -----------------------------------------------------------------------
 | |
| $ git log A B --not $(git merge-base --all A B)
 | |
| $ git log A...B
 | |
| -----------------------------------------------------------------------
 | |
| endif::git-log[]
 |