0

git で次のブランチ戦略を使用しているとします。

  • 新機能の継続的な開発のためのmasterブランチ。
  • release安定させるために次のリリースの前のある時点で作成されるブランチ。

ブランチが作成されるreleaseと、一部の開発者は継続してコミットしmaster(以降のリリースの機能に取り組んでいます)、他の開発者は現在のリリースの完成に取り組んでいます。ブランチが存在する間、リリース ブランチの安定性を維持するために、releaseからのコミットmasterはマージされません。

リリース時に、releaseブランチの最終コミットにリリース バージョンのタグが付けられます。次に、マージが実行さreleaseれますmaster(両方のブランチでの同時開発のため、明らかに早送りではありません)。

ここで、後で (さらにコミットした後master)、リポジトリを最後のリリースの状態にリセットしたいと考えています。

タグ付けされたリリース コミットにロールバックすると、ブランチmasterでの状態とは異なるリポジトリ状態になるのではないでしょうか? release(私が何かを見逃していない限り、タグ付けされたリリースコミットの前に発生したためmaster、両方のブランチがアクティブな開発中であったときのコミットがロールバック後もコミット履歴に残っているため、これが当てはまります。)master

releaseブランチを にマージする代わりにリベースすると、masterこの問題は解決されるようですが、複数の開発者がmaster.

何かご意見は?

編集:@jthillの回答のおかげで、状況と私が混乱した理由を説明する図を追加しました。

実際に起こったことの図は次のとおりです。

...o---X---o---o---o---M  master
         \             /
          a---b---c---R    release
                      ^
                    (v1.0, final commit in release branch)

さて、これは線形コミット履歴がどのように見えるかを示す図です(これは私の誤ったメンタル モデルを駆り立てていました) --コミットのタイムスタンプに基づいて、 ref と/ / ref が混ざり合っているmasterことに注意してください。これが私を悩ませていたものです-フラットなコミット履歴では、 refにロールバックすると、後続のすべてのコミットも削除されることが明確になりません!oabcRoX

...o---X---o---a---b---o---c---o---R---M  master
                                   ^
                                 (v1.0, final commit in release branch)
4

1 に答える 1

1

あなたのテキストの説明から、

  • リリース ブランチの最終コミットがタグ付けされます
  • 次に、リリースからマスターへのマージが実行されます

私はこの写真を取得します:

 ...o---X---o---o---o...M  master
         \             /
          o---o---o...R    release
                      ^
                    (v1.0, final commit in release branch)

ここでは、この図に示されている 3 つの参照のみを指定しました。注意してください

マスターでタグ付けされたリリース コミットにロールバックしない

あなたが説明したタグを付けてからマージするシーケンスとは一致しませんが、 または を参照するかどうかにv1.0かかわらず、変更について言及した唯一の参照は です。 RMMmaster

あなたの質問に答えるには:

マスターでタグ付けされたリリース コミットにロールバックすると、リリース ブランチとは異なるリポジトリの状態になるのではないでしょうか?

git checkout -B master Mこれらの 3 つの参照は、その写真の場所に正確に残されます。


さて、私があなたを誤解したとしましょう。考えてみてください: 私の誤解がどうであれ、私を正すには、どのリファレンスがどのコミットにあったかを教えていただく必要があります。

于 2013-11-08T03:39:02.190 に答える