2013-02-08 3 views
12

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

、のようなもの:

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

左の列は、元シャスのリストであり、そして右の列は、フィルタ分岐によって書き換えられた後に、新しいシャスです。

フィルタブランチのman pageにはmapという機能がありますが、ここでは有用かどうか、それがどういうものかは分かりません。

ありがとうございました!

答えて

18

私はgit-filter-branchのためにソースを突き止めてこれを動作させなければならなかった。 (私が知る限りは)文書化されていませんが、古いコミットIDは明示的に$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>を持っています。)

私は一種の好奇心あなたの意図が何であるか、このかかわらずを使用してね。フィルタブランチを「正しい」方法で使用している(つまり、既存の公開された履歴を操作しない)場合は、通常は知っておく必要がある情報のようには見えません。

+0

大変ありがとうございます!何らかの理由で-nも印刷されていたので、私はそれを取り出しました。出力が交互になっても構いません。 これはパブリック・リポジトリではありません。 :-) –

+0

ああ、$ GIT_COMMITは文書化されているようです: "$ GIT_COMMIT 環境変数は、書き換えられるコミットのIDを含むように設定されます" –

+0

ああ、いいよ。これは安心しています.Gitの次のリリースではこれが魔法のように動作しなくなることを心配しなくてすみます。 :-) – impl

関連する問題