Ну так в этом и проблема. Пушатся коммиты которых ещё нет на сервере. Т.е. нужно ещё понять а что собтственно будет отправлено.
Мы это решаем скриптом который проверяет у ветки наличие upstream и сравнивает то что мы собирается закоммитить с этим апстримом (если есть) или главной веткой.
На самом деле не числа 32-битные, а битовые операции работают только с 32-битными числами и автоматически приводят операнды к таковым округляя и выкидывая лишние биты.
Вообще этот алгоритм (hash32) притащили из Java, и вообще-то он может возвращать отрицательные числа.
А вот что хотел автор складывая число и строку (h1 + str) сложно сказать.
Выводите всем 4 — я только что кинул кубик и он показал 4.