2013-10-28 8 views
7

私は既にプライベートリモートにプッシュされている古いコミットのメッセージをrewordできますか? 私はタイムスタンプとタグを保持したい。git filter-branch - プッシュされたコミットメッセージをリワードするための-msg-filter

iが追加タグ保つために
git filter-branch -f --msg-filter \ 
'sed "s/<old message>/<new message>/g"' -- --all 

--tag-name-filter catは、コマンドのgitを実行する場合は、私に語った:MSGフィルタは

私がしたいメッセージを失敗した私は、このコマンドhereを見つけ

変更するには、マージされたメッセージです "Merge branch 'release/...'"これは問題ですか?

+0

スクリプティングのgitリベースは - 私は別のオプションです:http://stackoverflow.com/questions/12394166/how-do-i-run-git-rebase-interactive-in-non-interactive-manner – MarcH

答えて

11

解決策は、「リリース/ ...」のスラッシュをバックスラッシュでエスケープすることでした。だから私は使用したコマンド:

git filter-branch -f --msg-filter \ 
'sed "s/release\/Version-[0-9].[0-9].[0-9]/develop/g"' \ 
--tag-name-filter cat -- --all 
1

ここでは、フィルタ分岐行う際に、その場でコミットメッセージにハッシュをコミットするすべての参照を更新し、わずかに改善したバージョンです:

rm -f /tmp/git; 
touch /tmp/git; 
git filter-branch \ 
    --subdirectory-filter <DIRECTORY> \ 
    --tag-name-filter cat \ 
    --commit-filter 'echo -n "s/${GIT_COMMIT}/" >>/tmp/git; \ 
        NEW=`git_commit_non_empty_tree "[email protected]"`; \ 
        echo "${NEW}/g" >> /tmp/git; echo ${NEW}' \ 
    --msg-filter 'sed -f /tmp/git' \ 
    -- --all 
関連する問題