#!/bin/bash start_rev=$1 end_rev=$2 cmd=$3 function main() { revs=`git rev-list --topo-order --reverse ${start_rev}..${end_rev}` for rev in $revs; do git checkout --quiet $rev eval $cmd git reset --hard --quiet done git checkout ${end_rev} } main "$@"