如何从'git filter-branch'获取旧的>新重写的提交SHA列表?

时间:2013-02-08 23:15:50

标签: git git-filter-branch

运行git filter-branch之后,如何获取由filter-branch重写为新的相应提交SHA的旧提交SHA列表?

例如,类似于:

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

左列是原始SHA的列表,右列是filter-branch重写后的新SHA。

我看到过滤器分支的man page提到map函数,但我不明白这是否有用,或者是否有用,如何使用它。

感谢您的帮助!

1 个答案:

答案 0 :(得分:19)

我不得不四处寻找git-filter-branch的源代码来解决这个问题。它没有记录(据我所知),但旧的提交ID显式导出为$GIT_COMMIT。这对我有用:

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

(当然,该文件的格式为<original commit hash>,<new commit hash>。)

我有点好奇你使用它的意图是什么。如果您以“正确”的方式使用过滤器分支(即,不操纵现有的已发布历史记录),您通常不需要知道的信息。