14

を実行した後git filter-branch、filter-branchによって新しい対応するコミットSHAに書き換えられた古いコミットSHAのリストを取得するにはどうすればよいですか?

たとえば、次のようなものです。

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

ここで、左側の列は元のSHAのリストであり、右側の列はfilter-branchによって書き換えられた後の新しいSHAです。

filter-branchのマニュアルページmapに関数が記載されているようですが、それがここで役立つかどうか、または役立つ場合はその使用方法がわかりません。

ご協力いただきありがとうございます!

4

1 に答える 1

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>。)

でも、これを使ってあなたの意図がどうなっているのか気になります。フィルタブランチを「正しい」方法で使用しているかどうか(つまり、既存の公開された履歴を操作していないかどうか)を通常知る必要がある情報のようには見えません。

于 2013-02-09T00:09:26.730 に答える