HOWTO · Git

別の名前の別のブランチへの Git プッシュ

この記事では、選択した名前で特定のブランチに Git プッシュするオプションについて説明します。 このチュートリアルに従うことで、その方法を学ぶことができます。 Git の push コマンドを使用しますが、それにいくつかの興味深いオプションを渡します。 また、この機能を実現するための鍵となる Git refspec についても取り上げます。

このページの内容

git push には、Git の機能をフルに活用できる豊富なオプションがあります。 これらの 1つは、その source:destination refspecs パラメータです。

これらを使用して、選択した名前の特定のブランチに git push します。 最後に、ローカルと同じ名前のブランチではなく、新しいブランチを git push すると、ワークフローが大幅に向上するユースケースがいくつか見られます。

git push コマンドとその豊富なオプション セット

Git は、そのままの git push コマンドによるリモートへの単純なプッシュに制限しません。 代わりに、希望する結果を達成するためのいくつかの強力なオプションを提供します。

これらのうちの 2つは、[remote_repe] および [src:dst] refspecs パラメータです。

これらのパラメーターが、別のブランチへの git push にどのように役立つかを見てみましょう。

git push [remote_repo] [refspecs]

[remote_repo] は、ローカル システムのリモート リポジトリを指します。 ほとんどの場合、この名前は origin です。

[refspecs] は、特定のブランチへの git push に対する興味深いパラメーター キーです。 この投稿の最後にある refspecs で詳しく説明します。

src:dst という形式を持ちます。ここで、src は、プッシュするローカル ブランチを指します。 dst は、プッシュ先のリモート ブランチへの参照 (または名前) です。

デフォルトでは src パラメータと同じ名前ですが、dst 値を明示的に指定することで、特定のブランチへの git push を選択できます。

最初にローカル リポジトリをセットアップし、それをリモート リポジトリにリンクします。 次に、ローカル リポジトリに新しいブランチも作成します。

プッシュされていないブランチを含むローカル リポジトリ

機能ブランチのないリモート

リモート リポジトリには、ローカルに存在する feature_branch がありません。

feature_branch を新しい名前の別のブランチにプッシュします。

git push origin feature_branch:teamX_featureY

特定のブランチへの git プッシュ

feature_branch がリモートの別の名前で新しいブランチにプッシュされていることがわかります。

git push 新しいブランチをリモートにプッシュ

プッシュするたびにこれらの引数を渡す必要があることに注意してください。 それ以外の場合、dst パラメータはデフォルトでローカル リポジトリのブランチの名前になります。 ただし、Git は、これらを繰り返し入力する手間を省くためのきちんとしたショートカットを提供してくれます。

refspecs パラメータを一度設定して何度も使用するための git push のきちんとしたショートカット

Git では、ブランチのアップストリーム名は、常にプッシュ先のブランチです。 この値は、次のコマンドで設定できます。

git branch --set-upstream-to <remote_branch>

ただし、-u フラグを渡すだけで、git push でこのコマンドを実行することもできます。

git push -u origin local:different_remote

これを行うと、次にプッシュするときに、ローカル ブランチが different_remote ブランチにプッシュされます。 したがって、毎回明示的に名前を付ける必要はありません。

upstream フラグ付きプッシュ

この新しいアップストリーム ブランチは、リモート リポジトリにも表示されます。

新しい上流ブランチを持つリモート

次のコマンドを使用して、config ファイルの push.default 値を変更する必要があります。

git config push.default upstream

dst パラメーターに言及せずに second_feature をプッシュすると、Git は自動的にそれを different_remote にプッシュします。

git push origin second_feature

git config edit remote pushdefault

Git で別のブランチにプッシュしたい場合

新しいブランチを git push したい場合のいくつかのユースケースは次のとおりです。

  1. クールな機能またはモジュールを開発し、それを複数のプロジェクトにプッシュしたいとします。 自分でデザインしたハロウィーンをテーマにしたメニューのような単純な一般的な機能でさえ気に入って、多くのアプリでそれを使いたくなるでしょう。

    別の名前で各プロジェクトにプッシュする必要があります。

  2. 中央 (リモート) リポジトリとローカル セットアップの命名スキームが一致しない場合があります。 これは、大規模なチームが関与する複数のプロジェクトに取り組んでいる場合に特に当てはまります。

    そのような場合、refspecs オプションを指定した git push コマンドを使用すると、手間が省けます。

最後に、サインオフする前に、refspecs をさらに掘り下げてみましょう。

Git Refspecs

Git は、リポジトリ内のすべてのオブジェクトへの参照を内部的に保存します。 これにより、暗号化された SHA ハッシュを常に使用しなくても、さまざまな Git オブジェクトにすばやく簡単にアクセスできます。

Git では、これらのリファレンスを refspecs と呼んでいます (しゃれを意図したものです)。

これらの refspecs は、リポジトリ内の特別なディレクトリに保存されます。

  1. refs/heads ディレクトリには、オブジェクトへの参照がローカル リポジトリに保存されます。

    ローカル参照ヘッド

  2. refs/remotes には、リモート リポジトリの Git オブジェクトへの参照があります。

    リモート refs リモート

資力

  1. https://www.freecodecamp.org/news/git-push-to-remote-branch-how-to-push-a-local-branch-to-origin/
  2. https://github.com/jiffyclub/blog-posts/commit/4bf63cdafc9a3eb9602646ced972913ef73386bd
  3. https://davidwalsh.name/git-push-different-name
  4. https://stackoverflow.com/questions/36139275/git-pushing-to-remote-branch
  5. https://git-scm.com/docs/git-push