git - 如何将转换应用于所有过去的提交消息?

时间:2014-07-21 23:19:45

标签: git launchpad

我尝试将项目导入到启动板,但是这失败并显示错误:

  File "/srv/importd.launchpad.net/production/launchpad-rev-17114/bzrplugins/git/fetch.py", line 119, in import_git_blob
    ie = cls(file_id, name.decode("utf-8"), parent_id)
  File "/usr/lib/python2.7/encodings/utf_8.py", line 16, in decode
    return codecs.utf_8_decode(input, errors, True)
UnicodeDecodeError: 'utf8' codec can't decode byte 0xca in position 0: invalid continuation byte

所以我想知道如何搜索所有提交日志以及#34; 0xca" char并删除它?使用QGit手动查看历史记录并不会显示任何不合适的字符。

1 个答案:

答案 0 :(得分:1)

您可以使用git log --grep...查找错误提交并手动修复它们(不确定unicode是否适用于--grep)。如果手动修复太多,或者您希望自动执行该过程,请考虑使用git filter-branch --msg-filter <command>通过执行shell命令<command>来修改每个提交消息。以下是使用--msg-filter

的简单示例
   mkdir tmp
   cd tmp
   git init
   touch a
   git add .
   git ci -am 'first commit'
   touch b
   git add .
   git ci -am 'second commit'
   git log --oneline
   git filter-branch --msg-filter 'sed "s/^/hello /"'
   git log --oneline

请参阅this question,了解如何使用适当改变提交消息中unicode的命令填写<command>

然后,您可以通过运行

来检查更改
diff <(git log original/refs/heads/<your-branch> --oneline | cut -d' ' -f 2-) <(git log <your-branch> --oneline | cut -d' ' -f 2-)
相关问题