【问题标题】:How do I get a list of old->new rewritten commit SHAs from 'git filter-branch'?如何从“git filter-branch”获取旧的->新的重写提交 SHA 列表?
【发布时间】:2013-02-08 23:15:50
【问题描述】:

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

例如,类似于:

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

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

我看到 filter-branch 的 man page 提到了一个 map 函数,但我不明白这在这里是否有用,或者如果有用,如何使用它。

感谢您的帮助!

【问题讨论】:

    标签: git git-filter-branch


    【解决方案1】:

    我不得不去寻找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>。)

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

    【讨论】:

    • 太棒了,非常感谢!! -n 由于某种原因也被打印出来了,所以我把它拿出来了。我不介意输出在交替线上。别担心,这不是一个公共回购。 :-)
    • 哦,似乎 $GIT_COMMIT 已记录在案:“$GIT_COMMIT 环境变量将被设置为包含正在重写的提交的 id”
    • 啊,很好。这让人放心——让我不再担心这会神奇地停止与 Git 的下一个版本一起工作。 :-)
    • 那么,为什么要打印-n?我不喜欢交替行输出。
    • 我通过用echo "${GIT_COMMIT},\c" >>/tmp/log; git commit-tree "$@" | tee -a /tmp/log替换该命令来实现它。
    猜你喜欢
    • 1970-01-01
    • 2013-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多