「u」は具体的に何をするのでしょうか? 「git push -u origin master」と「git push origin master」の違い 質問する

「u」は具体的に何をするのでしょうか? 「git push -u origin master」と「git push origin master」の違い 質問する

理解しようと一生懸命努力したにもかかわらず、どうやら私は git の使い方が下手なようです。

からカーネル.orgのためにgit push

-う

--set-upstream

最新または正常にプッシュされたすべてのブランチに対して、引数なしのgit-pull(1)やその他のコマンドで使用される上流(追跡)参照を追加します。詳細については、branch.<name>.mergegit-config(1)を参照してください。

以下branch.<name>.mergeよりgit config:

branch.<name>.merge

とともに、branch.<name>.remote指定されたブランチの上流ブランチを定義します。これは、git fetch/git pull にどのブランチをマージするかを伝え、git push にも影響します (push.default を参照)。ブランチ にある場合<name>、これは git fetch に、FETCH_HEAD でマージ対象としてマークされるデフォルトの refspec を伝えます。値は refspec のリモート部分のように扱われ、 によって指定されたリモートからフェッチされる ref と一致する必要があります"branch.<name>.remote"。マージ情報は、(最初に git fetch を呼び出す) git pull によって、マージ用のデフォルトのブランチを検索するために使用されます。このオプションを指定しないと、git pull はデフォルトで、フェッチされた最初の refspec をマージします。オクトパスマージを取得するには、複数の値を指定します。git pull を、<name>ローカルリポジトリの別のブランチから にマージするように設定する場合は、branch.<name>.merge目的のブランチを指定して、 に特別な設定 . (ピリオド) を使用しますbranch.<name>.remote

github でリモート リポジトリを正常にセットアップし、次のコマンドで最初のコミットを正常にプッシュしました。

git push -u origin master

その後、次のコードを使用して、無意識のうちに 2 番目のコミットをリモート リポジトリに正常にプッシュしました。

git commit -m '[...]'

originしかし、からに再度プッシュする必要があると誤って考え、次masterを実行しました。

# note: no -u
git push origin master

それは何をしましたか? まったく効果がなかったようです。元に戻しましたかgit push -u origin master?

ベストアンサー1

鍵となるのは「引数なしの git-pull」です。git pullソースのリモートまたはブランチを指定せずにブランチから を実行すると、git はbranch.<name>.merge設定を参照してプル元を判断します。git push -uプッシュするブランチにこの情報を設定します。

違いを確認するために、新しい空のブランチを使用しましょう。

$ git checkout -b test

まず、 なしでプッシュします-u:

$ git push origin test
$ git pull
You asked me to pull without telling me which branch you
want to merge with, and 'branch.test.merge' in
your configuration file does not tell me, either. Please
specify which branch you want to use on the command line and
try again (e.g. 'git pull <repository> <refspec>').
See git-pull(1) for details.

If you often merge with the same branch, you may want to
use something like the following in your configuration file:

    [branch "test"]
    remote = <nickname>
    merge = <remote-ref>

    [remote "<nickname>"]
    url = <url>
    fetch = <refspec>

See git-config(1) for details.

ここで以下を追加します-u:

$ git push -u origin test
Branch test set up to track remote branch test from origin.
Everything up-to-date
$ git pull
Already up-to-date.

git pullリモートまたはブランチを指定しなくても期待どおりに動作するように追跡情報が設定されていることに注意してください。

更新:ボーナスのヒント:

  • Mark がコメントで述べているように、git pullこの設定は のデフォルトの動作にも影響します。追跡対象のリモート ブランチをキャプチャするためにgit pushを使用する習慣がある場合は、構成値を に設定することをお勧めします。-upush.defaultupstream
  • git push -u <remote> HEAD現在のブランチを同じ名前のブランチにプッシュします(その後<remote>実行できるように追跡も設定します)。git push

おすすめ記事