2013-10-28 110 views
7

如何重新引用已經推送到私有遠程的舊提交的消息? 我想保留時間戳和標籤。git filter-branch --msg-filter重新引導推送的提交消息

我發現這個命令here

git filter-branch -f --msg-filter \ 
'sed "s/<old message>/<new message>/g"' -- --all 

爲了保持我加了標籤:--tag-name-filter cat

當執行命令git的告訴我:消息過濾器失敗

我要留言改變是一個合併信息「合併分支」發佈/ ...'「是這個問題嗎?

+0

腳本git的變基 - 我是另一種選擇:http://stackoverflow.com/questions/12394166/how-do-i-run-git-rebase-interactive-in-non-interactive-manner – MarcH

回答

11

解決方案是使用反斜槓在「release/...」中跳出斜線。所以我用的命令是:

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