9

履歴の書き換えがありますが、今のところ元のツリーをそのままにしておきたいと思います。ただし、書き直されたツリーは、以前に使用されたタグもコピーする必要があります。たとえば、タグ名の前にブランチ名を付けるよりも手動のオプションはありますか?

4

2 に答える 2

18

いいえ、git にはブランチごとのタグのようなものはありません。すべてのブランチとタグは、Git では一種の ref です。ref は、リビジョン履歴内の特定のリビジョンを指す単なる名前です。たとえば、develおよびmasterブランチとv1.0およびv2.0タグがある場合、参照は次のようになります。

refs/heads/devel -> *
                    / \
                   * * <- refs/heads/master
                   | | | |
                   * *
                    \ /
                     * <- 参照/タグ/v2.0
                     | |
                     *
                     | |
                     * <- 参照/タグ/v1.0
                     | |
                     *

ご覧のとおり、これらのタグをブランチに結び付けるものは何もありません。master実際、これらのタグはすべてとdevelブランチの両方に含まれています。リポジトリの中.gitを見ると、タグにはそれ以上の構造がないことがわかります。これは、 内のコミットを参照する SHA-1 を含む単なるファイル.git/refs、または 内の行です.git/packed-refs(タグは頻繁にpacked-refs変更されないため頻繁に含まれますが、ブランチは通常 内の個別のファイルになりますgit/refs)。

したがって、履歴を書き換えて古いタグを保持したい場合は、タグ名を書き換える必要があります。sehe が指摘するように、これは を使用して行われgit filter-branch --tag-name-filterます。

于 2011-04-18T14:37:59.853 に答える