magitでローカルブランチをプッシュするように上流ブランチを設定するにはどうすればよいですか?


11

私が覚えていることから、たとえば、ブランチで作業している場合my-feature-branch、以前はを使用してmagit-statusメニューからこれを実行でき、上部にP Pあるリストからリモートブランチを選択していorigin/my-feature-branchました。これは美しく機能しました。

最近、このディスカッションの時点でP -u e(を開きmagit-push-popup--set-upstreamフラグを設定しe、他の場所でを使用して)と同様のことができるようになりました。これにより、で始まるブランチのリストから同様に選択できますorigin/my-feature-branch。これも私にとってはうまくいきました。しかし、さらに最近では、これは機能しなくなり、上流のブランチを設定するための最良の方法を見つけることができませんでした。

P eブランチにプッシュする最初のオプションを使用する場合origin/my-feature-branchはです。これはほとんどの場合私が欲しいものです。ただし、origin/my-feature-branch私のローカルブランチのアップストリームとして設定されていません。を使用P uすると、上流のブランチを選択できますorigin/my-feature-branchが、リストにはありません。origin/my-feature-branchタブ補完なしで入力する必要があります(これは難しいことではありませんが、ユーザーエラーが発生しやすく、コマンドラインよりも低速です)。

これが今上流のブランチを設定する唯一の方法ですか、それとも何か不足していますか?この問題に関連する他のディスカッションやドキュメントを見ましたが、見つかったすべてのソースが古くなっているようです。


1
<remote>/<branch>パーツが誤ってプロンプトから除外されたと思います(このコメントを参照)。その間、magit-push-current-set-remote-if-missingnilに設定できます。
Kyle Meyer

私はそれを修正しました。以下の私の答えは、その修正を前提としています。
tarsius

他のいくつかの関連する問題を見つけて修正しました。Melpaが追いつくまで数時間待たないと、以下のすべてが100%正しくなります。
tarsius

回答:


11

アップストリームを同時に、またはプッシュせずに設定するには、いくつかの方法があります。

magit-push-current-set-remote-if-missingが非nil(デフォルト)の場合は、次のようになります。

Push feature to
 p pushRemote, after setting that
 u @{upstream}, after setting that
 e elsewhere

プッシュするために、origin/feature上流のプレスとしてそのセットuして、RETデフォルトの補完候補を受け入れること。

場合magit-push-current-set-remote-if-missingnilは、あなたの代わりにこれを見るでしょう。

Push feature to
 e elsewhere

p今押した場合、アップストリームが構成されていないことが通知されます(つまり、アップストリームがない場合、アップストリームにプッシュできないことを意味します)。

しかし、もしmagit-push-current-set-remote-if-missingあるnil場合、スイッチのリストを備えています--set-upstreamあなたが使用できるので、P - u pあなたは(第2のpは小文字であることを除いて)に使用されます。ただし、複雑な点が1つあります。値を変更した後、magit-push-current-set-remote-if-missingEmacsを再起動し--set-upstreamて表示または非表示にする必要があります。

最後に、「上流を設定(そして何もしない)」コマンドを使用して上流を設定できますb uorigin/masterRET。このアプローチを使用する場合、既存のブランチしか選択できないことに注意してください。


しかし、push-remoteを設定して、それにプッシュする方が良いでしょう。プッシュリモートの詳細と、それがアップストリームとどのように異なるかについては、情報マニュアルの分岐ノードを参照してください(Webバージョンはまだ更新されていません)。

基本的に、アップストリームブランチは、おそらく機能ブランチが(プッシュではなく、マージまたはリベースによって)マージされるブランチorigin/masterです。そして、push-remoteは、機能ブランチを作業中にプッシュするか、他の誰かがマージできるようにする場所です。ローカルブランチに名前が付けられfeature、push-remoteがmy-forkである場合、使用してそのブランチをP pプッシュすると、にプッシュされmy-fork/featureます。(「push-to-branch」は構成できません。push-remote上のブランチの名前は常にローカル名と同じです。)

したがって、あなたの質問は「アップストリームにプッシュしながら、同時にアップストリームを構成する方法」のようなものでしたが、私の推奨は、アップストリームにはまったくプッシュせず、代わりにプッシュリモートにプッシュすることです。

値を変更していない場合はmagit-push-current-set-remote-if-missing、を使用してプッシュリモートを構成できますP psome-remoteRET。:あなたはおそらく同じリモートに、すべての機能ブランチをプッシュするので、しかし、すべての支店のために、それを行うことが一度プッシュリモート設定することをお勧めしb当時とM-p右のリモートが選択されるまで。


また、通常は上流のブランチを明示的に設定する必要はないはずです。新しいブランチを作成し、リモートブランチを開始点として選択すると、それがアップストリームとして使用されます。

残念ながら、開始点は通常ローカルブランチであり、その場合、Gitはデフォルトでそれを上流として使用しません。しかし、これを一度実行することで簡単に修正できます:

git config --global branch.autoSetupMerge always

デフォルト値はですtrue。これは、「リモートブランチである場合、開始点を上流に設定する」ことを意味します。


ちなみに、プッシュリモートも同様です。これも通常、「新しい」リポジトリで半自動的に設定する必要があります。リポジトリのクローンを作成する場合origin、プッシュリモートとして使用するかどうかを尋ねられます。my-forkプッシュリモートとして使用する必要がある別のリモートを追加する場合を除き、「はい」と答える必要があります。あなたは使用して新しいリモートを追加するとM aし、remote.pushDefaultまだ設定されていない、あなたは、あなたが新しく追加されたリモートプッシュリモコンなどを使用するかどうかを尋ねられます。

これはmagit-clone-set-remote.pushDefaultおよびを使用して設定できますmagit-remote-add-set-remote.pushDefault

別の詳細オプションはでmagit-branch-prefer-remote-upstream、デフォルトはnilです。これをに設定しt、ローカルブランチを新しいブランチの開始点として選択すると、開始点の上流(いくつかのルールに従って、doc-stringを参照)の代わりに上流として使用される可能性があります開始点自体。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.