git wazzup

Het maken van nieuwe takken (branches) heb ik sinds ik git gebruik zo goed als onder een sneltoets zitten. Het is heerlijk om veilig op een tak te zitten knutselen zonder dat je het risico loopt de hele boom om te zagen.

Maar met zoveel takken is het gemakkelijk het overzicht te verliezen. Ik zat dan ook vaak met allerlei git GUI's te kijken waar al m’n spik splinter nieuwe uitbreidingen uithangen. Tot ik de wazzup functie van Magit tegen kwam, die doet precies wat ik wil: laten zien welke commits uit welke branches er niet in de huidige branch zitten.

Ik zit echter zo vastgeroest aan git.el dat ik wazzup in een klein Ruby scriptje heb gevat:

#!/usr/bin/env ruby
branches = `git branch`.split("\n")
current = branches.grep(/^\*/).first[/[^ *]+/]
branches = branches.map{|v| v[/[^ *]+/]}

(branches - [current]).each do |branch|
  unless (cherries = `git cherry -v #{current} #{branch}`).empty?
    puts "#{branch}\n#{cherries}\n"
  end
end

Output ziet er bijvoorbeeld als volgt uit:

automated-tasks
+ 6ff08f983e4fefec813fb1b0c3fa444abf79d838 Add task model
+ 174f42694ac862e37c3b04c03059b7f0c7814239 Only allow admin to create/edit task
+ 8a6d5bfa83d8781551e3295a8461009c84e7829a Task syntax checking validation
+ 748f08bee98f8902f7948964b833ca08404ce098 Drop dead code
+ b84a5382ca0541f712b21dec3215a61f0d29a356 Automation task

sync-service
+ 410ef348e381950ad3bd0c481f9b4e5c09810056 Sync controller and routes
+ 6804abaf643ec6d2cba54629b5980102776a6d0d Enforce POST method on update method

Dat is mooi! De "Drop dead code" commit wil ik ook! Die kan ik nu plukken met:

git cherry-pick 748f08

Merk op dat ik alleen de eerste 6 tekens uit de SHA-1 gebruik. Dat kan omdat er zeer waarschijnlijk geen andere commit in de repository zit welke met dezelfde tekens begint. Zie ook gitrevision(7).

Remco van 't Veer — 2009-07-21 Tue 10:03