11

注: this oneと同様の質問ですが、いくつかの重要な変更があります。

コミットIDを指定して、コミットの日付を書き換える次の関数があります。

rewrite-commit-date () {
    local commit="$1"
    local newdate="$2"
    newdate="$(date -R --date "$newdate")"
    echo ">>>> Rewriting commit $commit date: $newdate"
    git filter-branch --env-filter \
        "if test \$GIT_COMMIT = '$commit'
         then
             export GIT_AUTHOR_DATE
             export GIT_COMMITTER_DATE
             GIT_AUTHOR_DATE='$newdate'
             GIT_COMMITTER_DATE='$newdate'
         fi" &&
    rm -fr "$(git rev-parse --git-dir)/refs/original/"
}

rewrite-commit-messageコミットメッセージを変更する同様の機能を実装しようとしています。私が欲しいのは:

  1. この関数は、 と のrewrite-commit-message2 つのパラメータを受け入れます。commit_idnew_commit_message
  2. 古いコミット メッセージを知る必要はありません。commit_idどのコミットを変更するかを知るには十分です。
  3. いいえgit commit --amend、これは古いコミットに関連しているため (必ずしも最新のコミットとは限りません)
  4. 履歴とマスター リポジトリを書き換える心配はありません。私は機能ブランチで作業しており、許可されています。git push -f
  5. これを使用したいのfilter-branchですが、方法がわかりません:
    • 変更を特定のコミットに適用します。関数で使用される は で使用されますtestが、コミット環境に関連するものは何も変更したくないので、ここでは行いませんが、コミット メッセージです。rewrite-commit-dateenv-filterenv-filter
    • コミットメッセージを強制する方法は? には元の--msg-filterコミット メッセージが必要です。元のコミット メッセージは気にしません。--force-msg-filterまたは類似のものはありますか?

私が探しているのはこれに似ていますが、いくつかの注意事項があります。

  1. 変更をコミットの範囲ではなく、特定のコミットに適用する
  2. 完全に上書きしたいので、元のコミットメッセージは気にしません
4

1 に答える 1