マジットがブランチをどこにプッシュするかを尋ねないようにするにはどうすればよいですか?


10

ステータスバッファからを呼び出すmagit-push-currentP PMagit 2.1.0アップストリームが設定されていない場合、最初にブランチをどこにプッシュするかを尋ねられます。

以前使用していた名前を自動的に生成するにはどうすればよいですか?


2
わからない場合は、自動生成された名前が補完オプションの1つです。したがって、初めてリモートにプッシュsome-branch-nameするoriginときは、おそらくタイプするだけでo TAB s TAB、希望する名前を取得できます。
マラバルバ2015

わかりませんでした。ありがとう。問題は、同じプレフィックスで始まる多くのブランチがあることです。これはあまり便利ではありません。また、ローカルブランチと同じ名前のリモートブランチを常に配置します。
z1naOK9nu8iY5A 2015

回答:


8

更新:下記の「プッシュブランチ」は現在実装されています。詳細については、ブランチに関するドキュメントをご覧ください。

上流ブランチを一度設定する必要があります。あなたがいることを行ってたらP Pそれにプッシュし、あなたがステータスバッファ内unpulledとunpushed変更のリストを取得します(存在している場合)。

アップストリームブランチを設定するには、さまざまな方法があります。--set-upstreamプッシュポップアップからスイッチを使用できます:P -u P。または、アップストリームを設定し、他には何もしないコマンドを使用しますb u

また、Magitは、「開始点」がブランチ名である場合、新しいブランチを作成するときに上流のブランチを自動的に設定するようになりました。これは、ローカルおよびリモートの「上流」で機能します。ただし、ローカルブランチを開始点として選択した場合は、プッシュするのに役立ちません。現在のリポジトリから現在のリポジトリへのプッシュは明らかに意味がなく、許可されていません。

したがって、「上流」ブランチが実際には別のローカルブランチであるP P場合、上流ブランチが構成されていないかのように動作し、とまったく同じように動作しますP e。アップストリームがまったく設定されていない場合も同様です。

これは、Gitの制限によるものです。あるブランチに関連付けることができるブランチは1つだけであり、そのブランチは「上流ブランチ」と呼ばれます。少なくとも「上流」と「公開」のブランチがあった方がいいでしょう。私は最終的にそれをMagitに実装するつもりです。問題#1485を参照してください。

したがって、プッシュできるようにしたい場合P P、「上流」ブランチは、たとえば「マスター」ではなく、「オリジン/マスター」でなければなりません。


git push引数なしで常に実行されるプッシュバリアントを追加することを検討しています。これが何をするかは、Git構成にのみ依存します。


から分岐しましたが、上流に設定されていません。上流から自動的に設定されるようにmaster分岐origin/masterする必要がありますか
z1naOK9nu8iY5A 2015

更新された回答を参照してください。
tarsius 2015

1
origin/masterセットからorigin/master上流に分岐しますが、上流にあると期待していorigin/branch-nameました。
z1naOK9nu8iY5A 2015

それが必要な場合は、プッシュ中に行うのが最適です。P -p P <... completion ...> RETorigin/branch-nameあなたはそれを入力する必要はありませんので、完了候補として提供されます。
tarsius 2015

2
コードレビューにgitflowとpullリクエストを使用していて、機能ごとにブランチがある場合、これは通常1度だけpushするだけであり、常にローカルブランチと同じ名前のリモートブランチを作成する必要があるため、これは面倒です。別の名前付きブランチにプッシュすることは、コードレビューを回避することになります。
Barry Kelly

3

--set-upstream現在のブランチにまだアップストリームがない場合に自動的に有効になる次のアドバイスを使用します。

(defun magit-push-arguments-maybe-upstream (magit-push-popup-fun &rest args)
  "Enable --set-upstream switch if there isn't a current upstream."
  (let ((magit-push-arguments
         (if (magit-get-remote) magit-push-arguments
           (cons "--set-upstream" magit-push-arguments))))
    (apply magit-push-popup-fun args)))
(advice-add 'magit-push-popup :around #'magit-push-arguments-maybe-upstream)

ido補完と組み合わせると、次のコマンドで新しいブランチをプッシュできますP P RET

;; NOTE: requires ido-completing-read+
(setq magit-completing-read-function #'magit-ido-completing-read)

これはとてもクールです!どうもありがとうございました!
z1naOK9nu8iY5A 2015

0

私は単に新しいブランチを作成してからb c.git/configファイルを編集して、origin/branchすべてのmagit 2のものを探し回るのではなく、とにかく動作しないようです。

変化する:

[branch "fix_something"]
  remote = .
  merge = refs/heads/master

[branch "fix_something"]
  remote = origin
  merge = refs/heads/fix_something

これは機能しますが、同じことを実行するキーの組み合わせをmagit2でまだ見つけていません。リモートがoriginにまだ存在しないため、リモートを設定しようとしても機能しません。


1
アップストリームはを使用して設定できますbu。しかし、これを使用するgit branch --set-upstream-toと、ご存知のように、Gitは存在しないブランチをアップストリームとして設定できないため、Magitも設定できません。
tarsius 2015

@tarsius magit 1は、私が必要としていることを実行しているようです。そのワークフローのいくつかの類似点を取り戻そうとしているだけです。
David N. Welton、2015
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.