Gitコマンドについて調べる【git push】

git push

git pushは、ローカルリポジトリにcommitした履歴をリモートリポジトリにアップロードするものです。ここでやっと自分のコードの修正がローカルからリモートにいくので、他の開発者から自分の変更が見えるようになります。

$ git push [リモートリポジトリ] [ローカルのブランチ名]:[リモートのブランチ名]

例)

$ git push ssh://git@github.com/kimromi/example.git master:master

上のコマンドは、ssh://git@github.com/kimromi/example.gitに接続し、ローカルのmasterブランチをリモートのmasterブランチにpushするというものです。ただ通常はgit cloneした時に「origin」という名前でリモートリポジトリが設定されているので、「origin」を指定できます。リモートリポジトリ名を確認するにはgit remote -vで確認することができます。

# リモートリポジトリにoriginを指定
$ git push origin master:master

# リモートリポジトリに何が設定されているか確認
$ git remote -v

また、ローカルのブランチ名とリモートのブランチ名が同じときは省略して指定することができます。この形をよく使うと思います。

# master:master と同じ名前なのでmasterと省略できる
$ git push origin master

originmasterも省略できる

$ git push

でプッシュすることもできます。ただ挙動についてはpush.defaultの設定によって変わるので注意が必要です。push.defaultの設定については以下のエントリがわかりやすかったです。

qiita.com

私はsimpleに設定しています。

$ git config --global push.default simple

オプション

-f--force

リモートリポジトリの状態を強制的に現在のローカルリポジトリの状態に合わせます。

$ git push -f origin master

もしもローカルが古い状態であった場合や、チームで開発している場合などは使用を避けたほうが良いです。コミットが消えてしまったり他の開発者の履歴も消してしまう場合があります。

-u--set-upstream

-uをつけてpushすると、push先のブランチをTracking Branch(Upstream Branch)として登録するよう設定されます。Tracking Branchは日本語では追跡ブランチと言われ、現在のローカルブランチがどのリモートプランチを追跡しているか(ちょっと違うけど)の設定を持っています。これを設定されているとデフォルトでpushやpullの対象になります。

$ git push -u origin master

追跡ブランチの説明は以下のエントリーがわかりやすかったです。

snowlong.hatenablog.com