私のgerritの現在のログは次のようになっているとします:
私の目標は、commit8とcommit9を含む新しいタグ(v1.73.0)を作成し、Originにプッシュすることです。最新の安定したタグに基づいて新しいローカルブランチを作成し、必要なコミットをチェリーピックしてタグ付けするように言われました。ただし、タグをマスターにプッシュするのに問題があります。
私がやったことは次のとおりです。
...では、v1.73.0をマスターにプッシュするにはどうすればよいですか?
結果:
Gitでは、各タグは(1つの、単一の)コミットを「指す」と言われます。実際、ブランチについても同じことが言えます。ブランチ名alsoは1つのコミットを指しているだけです。
この機能を実現しているのは、次の2つのことです。
したがって、ブランチとタグの主な違いは、タグが移動しないことです。
これがどのように機能するかを確認するには、3つのコミットのみを含む単純なgitリポジトリーを検討してください。これらのコミットにA
、B
、およびC
というラベルを付けましょう。最初のコミット(A
)は最初のコミットであるため、何もポイントせず、ブランチmaster
はA
をポイントします。
A <-- master
2回目のコミットを行うと、gitはB
を指すA
を作成し、B
を指すようにブランチ名を進めます。
A <- B <-- master
次に、3番目のコミットを行うと、gitは再び親コミットをポイントし、ブランチを進めます:
A <- B <- C <-- master
ここでタグを作成すると、そのタグはデフォルトでコミットC
をポイントします:
A <- B <- C <-- master
^
|
tag: sometag
その後、新しいコミットD
を作成すると、gitはbranchを進めますが、タグは進めません。
A <- B <- C <- D <-- master
^
|
tag: sometag
特定のコミットを指すタグをいつでも作成または削除できます。
$ git tag -d sometag
タグsometag
を削除します。その後:
$ git tag sometag master~2
コミットを指すsometag
を追加しますB
。1
(タグcanが動くことを証明しました。本当の違いは、タグはexpectedではなく、ブランチはそうであるということです; gitは自動的にタグを動かしません。2 ブランチは一般に「順」方向に移動することが期待されます。つまり、master
がコミットを指すのにC
を使用し、現在はコミットD
を指す場合、通常はC
D
から開始し、逆方向に作業して見つけることができます。このルールに違反するようにブランチを移動するときはいつでも、「履歴を書き換えている」ことになります。他の記事を参照して、これで問題がなければ、いつ問題が発生するかを確認してください。)
git Push
を使用する場合、実際に実行しているのは、他のgitリポジトリに、使用していない新しいコミットを取得するよう指示し、いくつかの名前(通常はブランチやタグ)を設定することです。結果のコレクション内のいくつかのコミット(それぞれ1つ)を指すようにします。3 これらの名前(ブランチ、タグなど)は一般に「参照」と呼ばれますが、ここでは「ブランチ」と「タグ」を使用します。
git Push
の後の引数は、Push-toにリポジトリを指定します(一般的にはOrigin
などの「リモート」名を使用)。省略すると、gitはそれを見つけようとしますが、ブランチ名またはタグ名を追加する場合は、明示的に含める必要があります。最初のWordはリモート名であると想定されるためです。 (つまり、git Push master
は、ブランチ名ではなくリモート名としてmaster
を使用しようとします。)
allタグをプッシュするには、--tags
コマンドにgit Push
を追加するだけです。
git Push --tags Origin
specificタグをプッシュするには、名前を付けることができます:
git Push Origin sometag
特定のブランチをプッシュできるように:
git Push Origin master
(実際、4番目の引数はmaster:master
やsometag:sometag
のような名前のpairですが、ほとんどの場合、両側で同じ名前が使用されます。4)
すべての引数を作成する必要がない場合は、Origin
という名前を省略できます。たとえば、git Push --tags
はgit Push --tags Origin
と同じです(すべてのプッシュがOrigin
、とにかく)。
リモートでタグを設定するには、最初にgit tag namecommit-identifier
でローカルに設定します。任意のビューアを使用して、正しく設定されていることを確認してください。次に、git Push Origin name
またはgit Push --tags
でプッシュします。
1master~2
構文は、master
を介して見つかったコミットで開始し、2つのステップをバックアップするようにgitに指示します。代わりに、コミットB
の生のSHA-1をここで書くことができます。
2古いバージョンのgit(1.8.4より前)は、プッシュ時に誤ってブランチルールをタグに適用しました(リモート側、つまり、「早送り」であればタグを移動させます)。
3場合によっては、名前を「注釈付きタグ」に向けることができ、名前が「ツリー」または「ブロブ」オブジェクトを指すことを妨げるものは何もありませんが、それは通常のセットアップではありません。
4実際には、ブランチのデフォルトのdst refspecは複雑です。Push.default
設定、remote.repository.Push
設定があるかどうか、およびアップストリームが設定されているかどうかによって異なります。など。タグの場合、「上流」のようなものがないため、ルールはより単純です。
具体例を次に示します。
git add .
git commit -m "some description"
git tag v0.1.9 # or any other text
git Push Origin master # Push the commit
git Push --tags Origin # Push the tags
タグを作成したら(完了したように見えます)、単に実行します
git Push --tags Origin