Link to this comparison view

git_tricks [2017/12/06 11:18]
git_tricks [2017/12/06 11:18] (current)
Line 1: Line 1:
 +====== Handy Git Tricks ======
 +===== git graph =====
 +This alias pretty prints a cute graph of commits - similar to gitk, but on the terminal. Simply add this alias to ~/.gitconfig:
 +<code>
 +[alias]
 +graph = log --graph --all --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(bold white)— %an%C(reset)%C(bold yellow)%d%C(reset)' --abbrev-commit --date=relative
 +</code>
 +{{ :git-graph.png?400 |}}
 +===== Iterate Branch Commits =====
 +Automated bisection is a helpful way to find a broken commit in a branch, but sometimes you want to automatically check every single commit in a branch. Here is my method:
 +<code>
 +$ git rev-list start-commit..end-commit | while read id; do echo -n "$id "; git checkout -q $id; command >/dev/null 2>&1 && echo PASS || echo FAIL ; done
 +</code>
 +...where //command// is a command which exits with 0 on success and 1 on failure.
  
 +Typical output looks like this:
 +<code>
 +2dfae5a2966baa334d33b81f353265ba67753f60 PASS
 +52210ab9102a49f6be5a00d80d0987556a2cfd32 PASS
 +12510b5f81f2a37e9ed2a05a6ba1563465e2acfa PASS
 +ecd155e2ca942d4d0fcc3dd03d3cb72138e5034b PASS
 +d8c83fea3ca958b131e96ba05082c31d09ba0b9f PASS
 +8fc1129ed56e0427aa536df138c6cd2c320e514c FAIL
 +b66844b345820e70bf5a3ba4119c4b74f5dca4e7 FAIL
 +eba9adcf17398e9e63bab45b58f87ece5bdcfb13 FAIL
 +392c71ea68a35c886a29e58b568f961970d41eca FAIL
 +54940b6271c1cf2a885ea01a4d785ff95a1b1b27 FAIL
 +6953e740a0e8db3148425d1d64bb7cc965965315 FAIL
 +</code>
 +
 +A variant of the command that keeps logs of all the results:
 +<code>
 +$ mkdir -p logs; git rev-list start-commit..end-commit | while read id; do echo -n "$id "; git checkout -q $id; command >logs/$id.log 2>&1 && echo PASS || echo FAIL ; done | tee id-tests.log
 +</code>
 +This will keep a record of the command's output in a series of files contained in the ''log/'' subdirectory, and save the summary to ''id-tests.log''.
git_tricks.txt · Last modified: 2017/12/06 11:18 (external edit)