Ion*_*tan 5 tags git history rewrite
我刚刚第一次重写了我的一个repos的历史(使用git-filter-branch).问题是repo有几个标签,重写之后似乎与结果历史完全断开.我认为这是因为与标签相关的历史记录没有被重写,所以他们必须指向旧的提交.那么,我可以做些什么来"应用"新历史上的标签.一点点ASCII艺术,也许更容易理解我的问题:
原始回购:
+ HEAD
|
|
+ TAG 0.2.0
|
|
+ TAG 0.1.0
|
|
+ Initial commit
Run Code Online (Sandbox Code Playgroud)
报告gitk --all重写后报告的回购结构:
+ HEAD
|
|
|
|
|
|
|
|
+ Initial commit
+ HEAD
|
|
+ TAG 0.2.0
|
|
+ TAG 0.1.0
|
|
+ Initial commit
Run Code Online (Sandbox Code Playgroud)
$ git log --pretty=oneline origin/releases |
sed -n -e '/^\([0-9a-f]\{40\}\) Tag\( release\)\? \(.*\)/s--\3|\1|Tag release \3-p'
> ~/paludis-git-tags
$ while read name msg head ; do
git tag -m "${msg}" ${name} ${head} ;
done < paludis-git-tags
Run Code Online (Sandbox Code Playgroud)
我们的想法是从旧版本的存储库中读取标记,以便在新历史记录中重新应用它们.
注意:在你最初使用的git-filter-branch中,你使用了:
-- --all
Run Code Online (Sandbox Code Playgroud)
?
将
--用于分隔修订选项过滤器分支选项和--all重写所有分支和标签.
它可能已将标记保留在新历史记录中(我还没有测试过它)