137 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
			
		
		
	
	
			137 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
| git-bisect(1)
 | |
| =============
 | |
| 
 | |
| NAME
 | |
| ----
 | |
| git-bisect - Find the change that introduced a bug by binary search
 | |
| 
 | |
| 
 | |
| SYNOPSIS
 | |
| --------
 | |
| 'git bisect' <subcommand> <options> 
 | |
| 
 | |
| DESCRIPTION
 | |
| -----------
 | |
| The command takes various subcommands, and different options
 | |
| depending on the subcommand:
 | |
| 
 | |
|  git bisect start [<paths>...]
 | |
|  git bisect bad <rev>
 | |
|  git bisect good <rev>
 | |
|  git bisect reset [<branch>]
 | |
|  git bisect visualize
 | |
|  git bisect replay <logfile>
 | |
|  git bisect log
 | |
| 
 | |
| This command uses 'git-rev-list --bisect' option to help drive
 | |
| the binary search process to find which change introduced a bug,
 | |
| given an old "good" commit object name and a later "bad" commit
 | |
| object name.
 | |
| 
 | |
| The way you use it is:
 | |
| 
 | |
| ------------------------------------------------
 | |
| $ git bisect start
 | |
| $ git bisect bad			# Current version is bad
 | |
| $ git bisect good v2.6.13-rc2		# v2.6.13-rc2 was the last version
 | |
| 					# tested that was good
 | |
| ------------------------------------------------
 | |
| 
 | |
| When you give at least one bad and one good versions, it will
 | |
| bisect the revision tree and say something like:
 | |
| 
 | |
| ------------------------------------------------
 | |
| Bisecting: 675 revisions left to test after this
 | |
| ------------------------------------------------
 | |
| 
 | |
| and check out the state in the middle. Now, compile that kernel, and boot
 | |
| it. Now, let's say that this booted kernel works fine, then just do
 | |
| 
 | |
| ------------------------------------------------
 | |
| $ git bisect good			# this one is good
 | |
| ------------------------------------------------
 | |
| 
 | |
| which will now say
 | |
| 
 | |
| ------------------------------------------------
 | |
| Bisecting: 337 revisions left to test after this
 | |
| ------------------------------------------------
 | |
| 
 | |
| and you continue along, compiling that one, testing it, and depending on
 | |
| whether it is good or bad, you say "git bisect good" or "git bisect bad",
 | |
| and ask for the next bisection.
 | |
| 
 | |
| Until you have no more left, and you'll have been left with the first bad
 | |
| kernel rev in "refs/bisect/bad".
 | |
| 
 | |
| Oh, and then after you want to reset to the original head, do a
 | |
| 
 | |
| ------------------------------------------------
 | |
| $ git bisect reset
 | |
| ------------------------------------------------
 | |
| 
 | |
| to get back to the master branch, instead of being in one of the bisection
 | |
| branches ("git bisect start" will do that for you too, actually: it will
 | |
| reset the bisection state, and before it does that it checks that you're
 | |
| not using some old bisection branch).
 | |
| 
 | |
| During the bisection process, you can say
 | |
| 
 | |
| ------------
 | |
| $ git bisect visualize
 | |
| ------------
 | |
| 
 | |
| to see the currently remaining suspects in `gitk`.
 | |
| 
 | |
| The good/bad input is logged, and `git bisect
 | |
| log` shows what you have done so far.  You can truncate its
 | |
| output somewhere and save it in a file, and run
 | |
| 
 | |
| ------------
 | |
| $ git bisect replay that-file
 | |
| ------------
 | |
| 
 | |
| if you find later you made a mistake telling good/bad about a
 | |
| revision.
 | |
| 
 | |
| If in a middle of bisect session, you know what the bisect
 | |
| suggested to try next is not a good one to test (e.g. the change
 | |
| the commit introduces is known not to work in your environment
 | |
| and you know it does not have anything to do with the bug you
 | |
| are chasing), you may want to find a near-by commit and try that
 | |
| instead.  It goes something like this:
 | |
| 
 | |
| ------------
 | |
| $ git bisect good/bad			# previous round was good/bad.
 | |
| Bisecting: 337 revisions left to test after this
 | |
| $ git bisect visualize			# oops, that is uninteresting.
 | |
| $ git reset --hard HEAD~3		# try 3 revs before what
 | |
| 					# was suggested
 | |
| ------------
 | |
| 
 | |
| Then compile and test the one you chose to try.  After that,
 | |
| tell bisect what the result was as usual.
 | |
| 
 | |
| You can further cut down the number of trials if you know what
 | |
| part of the tree is involved in the problem you are tracking
 | |
| down, by giving paths parameters when you say `bisect start`,
 | |
| like this:
 | |
| 
 | |
| ------------
 | |
| $ git bisect start arch/i386 include/asm-i386
 | |
| ------------
 | |
| 
 | |
| 
 | |
| Author
 | |
| ------
 | |
| Written by Linus Torvalds <torvalds@osdl.org>
 | |
| 
 | |
| Documentation
 | |
| -------------
 | |
| Documentation by Junio C Hamano and the git-list <git@vger.kernel.org>.
 | |
| 
 | |
| GIT
 | |
| ---
 | |
| Part of the gitlink:git[7] suite
 | |
| 
 |