在所有分支上进行git-filter-branch

时间:2013-08-21 00:09:35

标签: git-filter-branch git-rewrite-history

我们正在从cvs / bugzilla转换为git / Stash / Jira。我正在测试使用git filter-branch在jira问题ID的提交消息中重写bugzilla bug #s。除了它只影响master而不影响任何分支外,这个工作正常。我使用-- --all但没有检出任何分支。这有必要吗?确切的命令如下:

git filter-branch -f --msg-filter 'ruby -S gitBugzillaToJira.sh' --tag-name-filter cat -- --all

注意 - gitBugzillatoJira.sh ruby​​脚本可以将bugzilla号码交换为Jira问题ID。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您的git-filter-branch咒语看起来是正确的,它应该更新您的回购邮件的本地副本中的所有引用。

这是一个非常相似的演示,正如预期的那样显示了这个正常工作:

$ git clone https://github.com/defunkt/github-gem.git
$ cd github-gem/
$ git filter-branch -f --msg-filter 'sed "s/e/E/g"' --tag-name-filter cat -- --all

...您会看到来自git-filter-branch的输出,表示已更新所有分支和标记(无需您执行git checkout它们):

Rewrite 8ef0c3087d2e5d1f6fe328c06974d787b47df423 (436/436)
Ref 'refs/heads/master' was rewritten
Ref 'refs/remotes/origin/master' was rewritten
Ref 'refs/remotes/origin/fallthrough' was rewritten
Ref 'refs/remotes/origin/gist' was rewritten
Ref 'refs/remotes/origin/keithpitt-ruby-1.9-update' was rewritten
WARNING: Ref 'refs/remotes/origin/master' is unchanged
Ref 'refs/remotes/origin/organizations' was rewritten
Ref 'refs/remotes/origin/upload' was rewritten
Ref 'refs/tags/REL-0.4.2' was rewritten

git filter-branch运行的这一部分得到什么输出?

答案 1 :(得分:0)

User Error!

就像图片所说,这是用户错误的情况!获得第三方确认后,我的git-filter-branch应该可以正常工作我意识到我只完成了git push所以只推出了本地签出的分支。看起来我应git push --all更新所有裁判。现在,我需要弄清楚为什么我和其他分支机构一起获得3个对master的引用:

* [new branch]      refs/original/refs/heads/master -> refs/original/refs/heads/master
* [new branch]      refs/original/refs/remotes/origin/master -> refs/original/refs/remotes/origin/master
* [new branch]      origin/master -> origin/master