37

push コマンドについて git man を読みましたが、 push.defaultに設定する現在アップストリームの正確な違いをまだ理解していません。

私たちのチームがプッシュを行い、現在取り組んでいるブランチの変更のみがプッシュされることを望んでいます。私が理解しているように、このブランチは、git branchを実行したときに * (スター) でマークされたブランチです。

助けてくれてありがとう。

4

2 に答える 2

56

問題は、何をプッシュしているのか、そしてどこにプッシュしているのかです:

  • current:

    • " what " は現在のブランチのみです (他のブランチはありません)。
    • " to where " は、上流の repoにある同じ名前のブランチです (存在しない場合は作成されます) 。
  • upstream:

here で説明されているように、Git2.0 では、次の新しいデフォルトが追加で導入されますpush.defaultsimple

simpleに似upstreamていますが、アップストリームも同じ名前である必要があります。そうしないと、プッシュが失敗します。


ブランチを 1 つだけプッシュすると (モード " simple"、" current"、または " ")、一致するすべてのブランチがプッシュされるシナリオ(モード " "、これが長い間デフォルトでしたupstream) が回避されます。プッシュする準備ができています。matching

(master)> git push
...
To git@github.com:jkubicek/my_proj.git
   21b430d..dd378ca  master -> master
 ! [rejected]        release -> release (non-fast-forward)
error: failed to push some refs to 'git@github.com:jkubicek/my_proj.git'
hint: Updates were rejected because a pushed branch tip is behind its remote
hint: counterpart. 
hint: If you did not intend to push that branch, you may want to
hint: specify branches to push or set the 'push.default' configuration
hint: variable to 'current' or 'upstream' to push only the current branch.

current2 つの (とupstream)の違いはプルにあります(リモートからブランチにプルするものは?):

  • " " をプッシュしても、現在のブランチに上流のブランチがcurrentあるという意味ではありません。 つまり、「 」ブランチをプッシュしている場合、設定されていません。 つまり、 にプルするとき、git はどのブランチをプルするかわかりません。Bremote/B
    branch.B.mergecurrent
    B

  • " " を押すと、現在のブランチに上流のブランチがupstreamあることを意味します。 つまり、「 」ブランチをプッシュしているときに設定されます つまり: にプルするとき、git はどのブランチをプルするか (およびどのリモート リポジトリ: )を認識します。Bremote/B
    branch.B.merge upstream
    Bbranch.B.remote

于 2012-12-06T20:20:19.183 に答える