Подтвердить что ты не робот

Как получить список старых-> новых перезаписываемых SHA из 'git filter-branch'?

После запуска git filter-branch, как мне получить список старых команд SHA, переписанных ветвью фильтра, в их новые соответствующие SHA?

Например, что-то похожее на:

b19fd985746c1f060f761d42d353e387bec243fb -> c8ab40ef9bae3b58642a8d1e5b90720d093a60b5
c5ebba1eeb92ca76c0effa32de14178ec7f07db6 -> 4d5a9958b98dbcfa47ce1354bb2af4cc77904639
705f71543235b872ca3e1067538e36d14044429d -> d2aafbd6e5b91955b62dee34f4a0abf0171ba016

Если левым столбцом является список исходных SHA, а правый столбец - это новые SHA после перезаписи веткой фильтра.

Я вижу, что страница man для ветки фильтра упоминает функцию map, но я не понимаю, полезен ли это здесь, или если это так, как его использовать.

Спасибо за вашу помощь!

4b9b3361

Ответ 1

Мне пришлось прокручивать источник для git-filter-branch, чтобы работать с этим. Он не задокументирован (насколько я могу судить), но старый идентификатор фиксации явно экспортируется как $GIT_COMMIT. Это сработало для меня:

$ git filter-branch --your-filters-here --commit-filter 'echo -n "${GIT_COMMIT}," >>/tmp/log; git commit-tree "[email protected]" | tee -a /tmp/log' your-branch-here
[...]
$ cat /tmp/log
70d609ba7bc58bb196a2351ba26afc5db0964ca6,d9071b49743701c7be971f76ddc84e76554516c7
0d1146dcabc00c45fb9be7fe923c955f7b6deb50,cb6813f9aca5e5f26fcc85007c5bb71552b91017
[...]

(Этот файл, конечно, имеет формат <original commit hash>,<new commit hash>.)

Мне любопытно, что ваши намерения связаны с этим. Это не похоже на информацию, которую вам обычно нужно знать, если вы используете фильтр-ветвь "правильным" способом (т.е. Не манипулируете существующей опубликованной историей).