bugfix> git > 投稿

初期インポートとしてプログラムv2.0のソースコードを持っているgitリポジトリがあります。

v2.0(master) - o - o - ...

v2.0の初期インポートコミットの前にv1.0コードのブランチを作成できますか?お気に入り:

v1.0 - o - o - ...
  \
   v2.0(master) - o - o - ...

回答 1 件
  • 短い答えはノーです。

    長い答えは有益です:Gitではブランチ名前 ただコミットへのポインター。これは、「ブランチ」の意味に関係なく、「ブランチ」とはどういう意味ですか?を参照してください。少なくとも1つのコミット その上。

    さらに、この図は根本的に間違っています。

    
    v2.0(master) - o - o - ...
    
    

    これは、ブランチが名前 左側に座って、新しいコミットが1つずつ右に成長します。確かに新しいコミット行う 右側に1つずつ成長しますが、ブランチは名前 右側にも座っています!つまり、 master という名前  最初は、最初に行ったコミットを指します。完全に空のリポジトリから始めます。

    master (HEAD)
    
    

    名前 HEAD  存在し、ブランチ名 master に接続されている 、しかしブランチ自体存在しない コミットがないためです!1  支店名しなければならない 既存の有効なコミットを指しますが、まったくありません。

    最終的に、最初のコミットを行い、Gitはすぐに master という名前を付けます  それを指します。コミットには大きなbigいハッシュIDがあります。これは実際、そのコミットの内容の暗号チェックサムです。これは、名前とメールアドレス、そのコミットの下に保存されているすべてのファイル、および日時によって異なります。予測することを本質的に不可能にします。しかし、単に A と呼びましょう。 :

    A   <-- master (HEAD)
    
    

    その後、しばらくして、新しいコミットを作成します。これを B と呼びます  ここに。新しいコミット B  コミット A の実際のハッシュIDを記録します 、だから我々はその B と言う  に指差す  A

    A <-B
    
    

    この時点でブランチ名に何が起こるかが鍵です。名前 master  止まる  A のコミットを指す  Gitはすぐに master を上書きするため  新しいコミット B の新しいハッシュID :

    A <-B   <-- master (HEAD)
    
    

    この時点で、新しいブランチ名を作成する場合は、これら2つの既存のコミットのいずれかを指すように設定することで作成します。その後、名前 HEAD を添付できます  それに:

    A <-B   <-- master, xyz (HEAD)
    
    

    そして今、あなたが新しいコミットをするなら、それを C と呼びましょう -新しいコミットは B を指す  Gitは C を書き込みます の HEAD を持つ名前のハッシュID  それに添付:

    A <-B   <-- master
         \
          C   <-- xyz (HEAD)
    
    

    コミット A  他のコミットを指すことはありません。コミットは一度行われると読み取り専用になります。 A をコミットする  ありません そして、それは永遠にそのままです。

    (いつでも、一連の新規および違う コミットすると、Gitで変更できますすべて を指すブランチ名完全に新しい異なるセット コミットの数なので、次のように作成できます:

    G--H--I   <-- branch-for-v1
     \
      J--K--L   <-- master (HEAD)
    
    

    コミットを残す A-B-C  永遠に遅れ、最終的にこれらの3つのコミットは期限切れになり削除されますが、これはしません変化する  A-B-C をコミットします 、それらは実際のハッシュIDによって識別されますが、それらはどのようなものであってもかまいません。このアイデアの一般的な用語-コミットのまったく新しいチェーンを作成し、ブランチ名が新しいチェーンを指すようにするの代わりに 古いチェーン—と呼ばれます書き換え履歴。コンセプトが機能する場合、それが機能するのは、私たち人間はどちらかをコミットするところから始めるからです。名前 を指し、Gitと同じように、これらの後方を指す内部コミット矢印を介して後方に向かって動作します。)


    1つまり、Gitにどのブランチにいるのかを尋ねると( git status  たとえば))、それは master と言うでしょう 、しかし、どのブランチが存在するかをGitに尋ねると、番号 枝が存在します。文字通り、存在しないブランチにいます。 Gitはこれをさまざまに胎児の枝 または孤児の枝。前者は、少なくとも私の意見では、実際にはより良い名前です。 「オーファンブランチ」という名前は、Gitの開発の早い段階で誰かがだまされたために私たちが行き詰まっている間違いです。

あなたの答え