2017-02-08 4 views
2

私はこのGITコマンドが何をするのか理解しようとしています:このGITコマンドは何をしますか?

git push origin master:release_candidate --force

私はgit push origin masterがリモート原点にローカルマスタをプッシュ知っています。

私は:release_candidate --forceの部分を知りたいと思います。

+3

https://git-scm.com/docs/git-push – axiac

+2

'man git push'または' man git-push' – Pockets

答えて

4

:release_candidateの部分はリモートrefspecです。それはブランチrelease_candidateと呼ばれるリモートブランチにmasterと呼ばれる支店を押します。通常、:がないと、ローカルブランチは同じ名前のリモートブランチにプッシュされます。

オプションを指定すると、リモートでコミットが失われても、オプションがプッシュされます。あなたがしたいことが前にrelease_candidateブランチにあったものを強制的に上書きするなら、これは問題ありません。

1

のはdocumentationを読んで、あなたのコマンドを説明する部分を抽出してみましょう:

git push [-f | --force] [<repository> [<refspec>…​]]

(私は疑問に存在していない無数のオプションを省略)

オプション

<repository>

プッシュ操作の宛先である「リモート」リポジトリ。このパラメータには、URLまたはリモートの名前を指定できます。 refspec>…

どのソースオブジェクトをどのソースオブジェクトで更新するかを指定します。 <refspec>パラメータの形式は、オプションのプラスの+で、その後にソースオブジェクト<src>、その後にコロンである:、その後に宛先の参照<dst>が続きます。

<src>

は、多くの場合、あなたがプッシュしたいブランチの名前ですが、それは任意の「SHA-1の発現」、

<dst>などmaster~4HEADを伝えることができ、リモート側でその参照このプッシュで更新されます。ここでは任意の式を使用することはできません。実際のrefには名前を付ける必要があります。

<src>で参照されるオブジェクトは、リモート側の<dst>参照を更新するために使用されます。デフォルトでは、<dst>がタグ(注釈付きまたは軽量)でない場合にのみ、そして<dst>を早送りできる場合にのみ許可されます。

...
--force

-f

通常、コマンドは、それを上書きするために使用されるローカル参照の祖先ではないリモート参照を更新してくれません。 [...]

このフラグは、これらのチェックを無効にし、リモートリポジトリにコミットが失われる可能性があります。慎重に使用してください。


、あなたのコマンドをすべてをまとめると:

git push origin master:release_candidate --force 

originリモートのブランチrelease_candidateを更新するために、ローカルブランチmasterを使用しています。ローカルブランチmasterがリモートブランチorigin/release_candidateの子孫である場合、--forceフラグは必要ありません。それ以外の場合は、--forceを指定しないと、プッシュはリモートサーバーによって拒否されます。

--forceを使用した場合の詳細については(例をあげて)、Notes about fast forwardsのマニュアルを参照してください。

関連する問題