【Github】git pushの-uオプションとは何か?上流ブランチやupstreamについて実例で解説|–set-upstreamとの違いや上流ブランチの確認・設定方法(初心者向け、わかりやすい)

github-prograshi(プロぐらし)-kv git/github
記事内に広告が含まれていることがあります。

Githubでレポジトリを作成するとコードの中に「git push -u origin main」があります。

git push origin main」は良く使うし、やっていることの意味もわかる。でもオプションの「-u」って何?という方もいるかと思います。

ここでは、git pushのオプション「-u」が何をしているかについて実例でまとめています。


git pushの使い方

git pushの使い方と処理内容

初めにgit pushについて簡単におさらいしておきます。そんなの知ってるよという人は読み飛ばしてください。

git pushはローカルレポジトリのGitのコード履歴をリモートレポジトリ(Github)にプッシュする処理です。

リモートレポジトリ(Github)
  ↑ push   ← ココ
ローカルレポジトリ
   ↑ commit
ステージ(インデックス)
   ↑ add
作業中のディレクトリ

git pushは最も頻繁に使用するコードの一つです。

git pushは以下のように使います。

git push [オプション] <リモートレポジトリ名> <ブランチ名>


ブランチ名の省略

git push origin mainという記述はよく使いますが、一つ知っておくべき重要なことがあります。それはブランチ名が省略されているということです。

git pushは本来次のように使います。

$ git push <リモートレポジトリ名> <ローカルブランチ名>:<プッシュ先のリモートレポジトリ名>

ブランチ名はローカルレポジトリのブランチ名と、push先のリモートレポジトリ名を記述します。

ローカルレポジトリのブランチ名と、push先のリモートレポジトリ名が同じ場合に、「:リモートレポジトリ名」の記述を省略することができます。

git push origin main

↓↑ 同じ

git push origin main:main


仮に、ローカルレポジトリのmainブランチの内容を、リモートレポジトリのtestブランチに送りたい場合は以下のように記述します。

git push origin master:test


「-u」オプションとは何か?

「-u」は、指定したリモートレポジトリのブランチを上流ブランチ(upstream)として設定するオプションです。

上流ブランチとして設定すると、git push するときにリモートレポジトリ名とブランチ名を省略できます

すなわちgit pushだけでプッシュできるようになるということです。

注意点

上流ブランチはローカルレポジトリのブランチ毎に設定するものです。 git push -u origin main は、ローカルのmainブランチの上流ブランチにoriginのmainブランチを指定するという意味です。

このため、他のブランチでブランチ名を省略したpushをしたい場合は、別途上流ブランチを設定する必要があります。


コードの実行例

「-u」つきのgit push -u origin mainを実行すると以下のようになります。

$ git push -u origin main
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Writing objects: 100% (3/3), 228 bytes | 228.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://github.com/〜/レポジトリ名.git
 * [new branch]      main -> main
Branch 'main' set up to track remote branch 'main' from 'origin'.


*[new branch] main -> mainとは?

ローカルブランチmainのデータを、リモートブランチmainにプッシュしていることを示しています。

その際、リモートブランチに新たにブランチを作成してことを明示しています。


Branch ‘main’ set up to track remote branch ‘main’ from ‘origin’.

「Branch ‘main’ set up to track remote branch ‘main’ from ‘origin’.」が「-u」オプションを追加したことで実行された内容です。

ローカルレポジトリのmainブランチに、リモートレポジトリ名originのmainブランチを上流ブランチとしてセットしたことを示してます。


上流ブランチがある場合とない場合のpushの違い

上流ブランチを指定していない場合はpushは以下のようになります。

git push <リモートレポジトリ名> <ブランチ名>

↓ 上流ブランチが設定してある場合

git push

コードがかなりシンプルになることがわかります。


コードの実行例

上流ブランチが設定してあるローカルレポジトリのブランチでgit push を実行するとプッシュが行われます。

$ git push
Enumerating objects: 11, done.
Counting objects: 100% (11/11), done.
Delta compression using up to 8 threads
Compressing objects: 100% (6/6), done.
Writing objects: 100% (6/6), 545 bytes | 545.00 KiB/s, done.
Total 6 (delta 4), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (4/4), completed with 4 local objects.
To https://github.com/xxxx/リモートレポジトリ名.git
   b80abcb..0adba46  main -> main


上流ブランチの確認方法

上流ブランチが設定してあるかどうかはgit branch -vvコマンドを実行することで確認できます。

#上流ブランチがない場合
$ git branch -vv
* main dc53f35 first commit

#上流ブランチある場合
$ git branch -vv
* main dc53f35 [origin/main] first commit

上流ブランチがある場合は、[リモートレポジトリ名/リモートレポジトリのブランチ名] が表示されます。

よって、このローカルレポジトリのmainブランチでgit pushを実行すると、リモートレポジトリ名originのmainブランチにpushを行います。

なお、ブランチ名の横の 数値(例 dc54f35)は最新のコミット番号、末尾の「first commit」はコミットメッセージです。

リモートブランチ確認時の注意点

リモートブランチを確認するコマンド git branch -vv は「v」が2つ必要です。

「v」が一つだけだと、上流ブランチが設定されていても画面上に表示されません。

#「v」が2つの場合
$ git branch -vv
* main dc53f35 [origin/main] first commit
#「v」が1つの場合
$ git branch -v
* main dc53f35 first commit


-uと--set-upstreamの違い

「-u」オプションと同じ処理をするものに「--set-upstream」があります。

「-u」オプションは 「--set-upstream」 の省略表記です。

オプションの前にハイフンが2つ「--」つくものをロングオプションと呼びます。冗長な書き方でオプションの実行内容が記載されている場合がほとんどです。

オプションの前にハイフンが1つ「-」つくものをショートオプションと呼びます。ハイフンの後にアルファベット1文字が続く、省略形の記述方法です。

git push -u origin main

↓↑ 同じ

git push --set-upstream origin main

同じ処理でも人によってショートオプションとロングオプションのどちらを使うかが分かれたりしますが、驚く必要はありません。焦らず行きましょう。


上流ブランチの設定方法

なお、上流ブランチは、git pull, git fetch, git push, git branchなどのコマンドでも設定可能です。

コマンドのオプション以外にも、コマンドでconfigファイルに追記したり、configファイル自体を書き換えする方法もあります。


オプションで指定する方法

--set-upstreamオプション

pull, fetch, pushのいずれでも使用可能です。

・git pull --set-upstream <リモートレポジトリ名> <リモートのブランチ名>

・git fetch --set-upstream <リモートレポジトリ名> <リモートのブランチ名>

・git push --set-upstream <リモートレポジトリ名> <リモートのブランチ名>


-uオプション(git pushのみ)

git pushのみショートオプションの「-u」が使えます。

git push -u <リモートレポジトリ名> <リモートのブランチ名>


--set-upstream-toオプション(git pushのみ)

git branchコマンドにも上流ブランチを設定するコマンドがあります。


設定ファイルを編集する方法(コマンドで.git/configファイルに追記)

configファイルに追記する場合は、対象のリモートブランチの(1)remote、(2)mergeの2つの値を設定する必要があります。

(1) $ git config branch.<ローカルブランチ名>.remote <リモートブランチ名>

(2)$ git config branch.<ローカルブランチ名>.merge refs/heads/<リモートブランチ名>

実例

$ git config branch.topic.remote origin
$ git config branch.topic.merge refs/heads/master


configファイルの確認

#configファイルの中身を見る
cat .git/config

エディタでファイルの中身を見ると以下のようにtopicブランチに対して、上流となる、リモートレポジトリ名とブランチ名が登録されていることがわかります。

[branch "topic"]
    remote = origin
    merge = refs/heads/master


設定ファイルを直接編集する方法(.git/configファイルに追記)

configファイルの中身を直接編集することもできます。

#エディタで開く
vim .git/config

vimエディタが起動するので、以下のように追加すれば完了です。

[branch "ローカルのブランチ名"]
    remote = リモートレポジトリ名
    merge = refs/heads/リモートのブランチ名
合わせて読みたい

Vimエディタの使い方については下記をご参照ください。

【vi(vim)とは?】vimテキストエディタを使う方法とコマンド一覧


上流ブランチを活用するコマンド

現在のローカルブランチに上流ブランチの設定ができれば、git pull, fetch, push時に引数を省略して実行することができます。

上流ブランチを活用するコマンド
  • git pull
  • git fetch
  • git push

使うときは、どのブランチでコマンドを実行しているかに注意してください。




タイトルとURLをコピーしました