注: 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
コミットメッセージを変更する同様の機能を実装しようとしています。私が欲しいのは:
- この関数は、 と の
rewrite-commit-message
2 つのパラメータを受け入れます。commit_id
new_commit_message
- 古いコミット メッセージを知る必要はありません。
commit_id
どのコミットを変更するかを知るには十分です。 - いいえ
git commit --amend
、これは古いコミットに関連しているため (必ずしも最新のコミットとは限りません) - 履歴とマスター リポジトリを書き換える心配はありません。私は機能ブランチで作業しており、許可されています。
git push -f
- これを使用したいの
filter-branch
ですが、方法がわかりません:- 変更を特定のコミットに適用します。関数で使用される は で使用されます
test
が、コミット環境に関連するものは何も変更したくないので、ここでは行いませんが、コミット メッセージです。rewrite-commit-date
env-filter
env-filter
- コミットメッセージを強制する方法は? には元の
--msg-filter
コミット メッセージが必要です。元のコミット メッセージは気にしません。--force-msg-filter
または類似のものはありますか?
- 変更を特定のコミットに適用します。関数で使用される は で使用されます
私が探しているのはこれに似ていますが、いくつかの注意事項があります。
- 変更をコミットの範囲ではなく、特定のコミットに適用する
- 完全に上書きしたいので、元のコミットメッセージは気にしません