bugfix> git > 投稿

gitリクエストとpullリクエストを使用して開発していて、次のようになっていると仮定します。

  • マスターブランチ
  • リリース/ 1 ....ブランチ また、すべての修正プログラムまたは機能について、プルリクエストが受け入れられた後に開始ブランチにマージされるブランチもあります。
  • だから私の質問は:

  • リリースブランチにタグが含まれていて、最後にリリースされたバージョンのrelease/1.x.yの後にリリースブランチがマスターにマージされた場合、タグもマージされますか?

  • そして、長期的なサポートのために私の質問は次のとおりです。

    誰かが10年後のタグ1.1.1の状態をチェックしたいと思っているとしましょう。 リリースブランチが削除されたがマスターにマージされ、マスターがある場合、このタグ付きコミットをチェックアウトすることは可能ですか?

  • ありがとう

    回答 3 件
    • 件名の質問に対する文字通りの答え—gitタグはマージされていますか?—「いいえ」ですが、どちらもそうではないため、これは興味深い答えではありません。ブランチ名。 Gitでのマージは、コミット

      あなたが投稿した図は悪くはありませんが、誤解を招くようなことがいくつかあります。ここにそれについてのいくつかのメモがあります:

      その中の矢印は前方を指しています。 Gitは前進しません。 Gitは逆方向に機能します。通常、これはそれほど重要ではありませんが、見つけるコミット、それは重要です。

      丸い円はコミットを表します。これはすべて問題ありません。

      いくつかのコミットはマージコミットそしていくつかのコミットは通常のコミット。この場合、すべて紫 feature/* シングルのように、コミットは普通です bugfix/bug-1 赤いもの。黄色と緑色のコミットのほとんどはマージコミットです。

      ダイアグラムの矢印の方向が間違っているため(Gitの後方ではなく前方にある)、複数の矢印が入っているため、どのコミットがマージコミットであるかがわかります。矢印が正しく描画されている場合、つまり後方に描画されている場合、マージコミットは、2つ以上の矢印が来る任意のコミットになります。でるそれの。

      ブランチ名とタグ名は単に識別します1コミット。この図は名前が記載されているため、ここでは非常に誤解を招く可能性があります master そして release/1.0.0 左に。これらがブランチ名である場合、実際には正しい、を指すそのブランチでの最後のコミット

      Gitは、各コミットから出てくる矢印、つまり、だろう矢印が正しく描画されていれば、各コミットから出てきます。後方。したがって、支店名常にを識別します最終ブランチでコミットします。これは、名前がチェーンの最後のコミットを指していることを意味します。

      ブランチ名のようなタグ名は、単に1つのコミットを直接指します。タグ名とブランチ名の主な違いには、ブランチ名は時間とともに移動します、新しいコミットを追加しても、名前が引き続き最終コミット。したがって、コミットが3つしかない小さなリポジトリがあり、これらのコミットを表すために(丸い円ではなく)大文字を使用する場合、次のように描画できます。

      A <-B <-C   <--master
      
      

      名前 master 最後のコミットを指し、 C 。コミット C それ自体が以前のコミットを指している B 、これは非常に最初のコミットを指します A 。 (以来 A 非常に最初のコミットであり、どこも指さないだけです。これが、Gitがトラバースを停止することを知っている方法です。)

      新しいコミットを追加するには—それを呼び出しましょう D -Gitは、既存のコミットを指すように新しいコミットを書き出します C 、これはブランチでの最後のコミットでした。その後、Gitは書き込みます D の実際のハッシュIDは、それが何であれ、名前 master

      A <-B <-C <-D   <--master
      
      

      タグ名がこれらのコミットの1つを指すように作成されている場合、そのタグ名は次の場所に残ります。

      A <-B <-C <-D   <--master
                  ^
                  |
               tag:v11
      
      

      新しいコミットを追加すると、次のようになります。

      A <-B <-C <-D <-E <-F   <--master
                  ^
                  |
               tag:v11
      
      

      タグ名は移動しておらず、移動しないでください。 (手動で「移動」するには、削除して同じ名前で別の名前を作成するか、強制オプションの1つを使用しますが、通常はこれを行わないでください。)

      Is it possible to check out this tagged commit if the release branch was deleted ...

      もちろん。ブランチ名、タグ名、およびその他の名前は、1つの特定のコミットを見つけるのに役立ちます。その名前を使用して、そのコミットに直接移動できます。コミット自体は、名前自体が存在し続ける限り、そのGitリポジトリに保持されます。

      コミットを(通常は名前で)見つけたGitは、各コミット内に埋め込まれた内部矢印を使用して、履歴を逆方向に移動できます。これは、コミットの名前がある場合を意味します D 、上の図のように、Gitは使用できます D 見つけるには C 、検索に使用できます B 、検索に使用できます A 。したがって、これらの4つのコミットは、このリポジトリに残ります。 D 見つけることができます。

      名前に注意してください master コミットを見つけます F 、これはコミットを意味します F 保持されます。コミット F コミットを見つけます ED 、 等々;したがって、これらのコミットも保持されます。したがって、それを意味する2つの名前があります D -以前は保持する必要があります。これらの名前のいずれかを削除すると、 D -保持-名前を1にしますが、 D まだ保持する必要があります。削除する名前が master 、しかし、コミット F 保持する必要がなくなりました。コミットする場合 F 捨てられる、つまりコミットする E どちらも検出できなくなり、コミットします E 捨てることもできます。

      見つけるために別の名前を追加した場合 F 、ある意味で名前を削除しても安全になります master 。名前を削除する master 事実上、それを「忘れる」でしょう最終コミットする master この時点で、コミットしました F 、しかしコミット F いくつかを通して見つけることができますその他名前なので、捨てられません。

      マージコミットには2つ(またはそれ以上)があることに注意してください1)そこから出てくる矢印。そのマージコミットが検出可能である場合、そこからの矢印は、それらの各パスで以前のすべてのコミットを保持します。したがって、ブランチ名で識別されるブランチチップコミットを、保持する名前を持つ他のブランチにマージしたら、マージされたブランチの名前を削除しても安全です。そのチップコミットを見つけることはできません。直接、しかしあなたはそれを見つけることができます間接的にを見つけることによってマージコミットそれはその余分なものの1つとしてそれを持っています親のコミットハッシュID。


      1Gitは、この種のマージを、2つ以上の「レッグ」が出てくるマージと呼んでいます。タコのマージ。これが、GitHubがロゴとしてoctocatを使用している理由かもしれません。

    • 1.)If the release branch contains Tags and if the release branch is merged into the master after the last released version of release/1.x.y, are the tags also merged?

      タグはマージされません。コミット(タグ付きかどうか)はマージされます。

      2.)And for long term support my question is: Lets assume somebody wants to check out the state of tag 1.1.1 in 10 years. Is it possible to check out this tagged commit if the release branch was deleted but was merged into the master and we have the master ?

      はい、それは可能であるだけでなく、タグの目的そのものです。タグは特定のコミットへの永続的な参照であるため、これらのコミットは後で検査するために引き続きアクセスできます。たとえそれらは何にもマージされていません。

    • 開発ブランチをマスターにマージするだけでも、タグを失うことはありません。タグとブランチの違いは、タグが特定のコミットのマーカーであるということです(タグは次のコミットで移動されません。次に、ブランチはコミットごとに移動されます)。したがって、マージ操作を行い、タグを使用してコミットをプッシュすると、タグ/タグを使用したコミットに戻ることができます。

      タグをリモートリポジトリにプッシュすることを覚えておく必要があります。 タグ付きのブランチのマージの例

    あなたの答え