1

かなり大きな (1000 件以上のコミット) リポジトリがあり、7 年分の変更と 6 つのリリース バージョン (各バージョンは git タグで表されます) があります。履歴を折りたたんで、最後のタグの前に、2 つのタグ間のすべてのコミットがバージョン タグを持つ 1 つのコミットに折りたたまれます。したがって、リポジトリの履歴を約 15 件のコミットに減らします。バージョン間で元に戻すことはありません。おまけとして、理想的には、コミットを折りたたむすべての人を として保持したいと考えていco-authored-byます。重要な場合、タグの前からタグを新しいバージョンにスキップするマージはありません。

から:

CHEAD
C2
C3
...
TAG6
Cx
Cy
...
TAG5
Ca
..

の中へ

CHEAD
C2
C3
...
TAG6
TAG5
TAG4
TAG3
TAG2
TAG1

続行する方法についてのアイデアはありますか?

4

1 に答える 1

0

タグによる折りたたみは簡単です。git logと の 2 つのオプションが--simplify-by-decorationあり--decorate-refs=<pattern>、次のように使用できます。

# --graph is useful to have a clear view of parent <-> child relation,
# you may use --oneline to have a compact view, or drop it if you want the complete
# commit messages
git log --graph --oneline --simplify-by-decoration \
      --decorate-refs=refs/tags   # <- this indicates 'keep only tags'

「の後のすべてTAG6、前のタグのみ」を取得する部分的な方法の 1 つTAG6は、2 つのコマンドでログを取得することです。

# in a 'mylog' script :
#!/bin/bash

log_history () {
    # get all from TAG6 up to HEAD :
    git log --decorate --graph TAG6..HEAD
    # get only tags up to TAG6 :
    git log --decorate --graph --simplify-by-decoration \
        --decorate-refs=refs/tags TAG6
}

# combine the two commands, and pipe them in your pager
# if you pipe the output of 'git log', git removes the default '--decorate',
# that's why I added it in the commands above
log_history | less

上記により、表示したいコミットの完全なリストが得られます。唯一欠けている部分は、グラフでTAG6とその子コミット ( のすぐ上のコミットTAG6) の間のリンクが描画されないことです。

git logあなたが説明した組み合わせを 1 つのコマンドで示す方法がわかりません。

于 2021-07-07T12:30:34.007 に答える