Git Remote

Gitはたくさん特長があり、一つはremote操作がとても便利です。ここで五つgitコマンドの概要、使い方を説明します。

git_remote

git clone

リモート操作の始め、リモートサーバからレポジトリをcloneする。

1
2
3
4
$ git clone <レポジトリのアドレス>

# 例えば、jQueryのレポジトリをcloneする場合は
$ git clone https://github.com/jquery/jquery.git

このコマンドをローカルで一つフォルダを生成して、名称は、リモートのレポジトリ名と同じです。違うフォルダ名を指定する場合は、二つ目のパラメータを指定できます。

1
$ git clone <レポジトリのアドレス> <ローカルのフォルダー名>

git cloneは複数のプロトコルをサポートできます,HTTP(s)のほか,SSHや、Gitや、ローカルファイルプロトコルなど

1
2
3
4
5
6
7
8
$ git clone http[s]://example.com/path/to/repo.git/
$ git clone ssh://example.com/path/to/repo.git/
$ git clone [user@]example.com:path/to/repo.git/
$ git clone git://example.com/path/to/repo.git/
$ git clone /opt/git/project.git 
$ git clone file:///opt/git/project.git
$ git clone ftp[s]://example.com/path/to/repo.git/
$ git clone rsync://example.com/path/to/repo.git/

常に、gitプロトコルを使う場合は、ダウンロードのスピードが一番早い。

git remote

管理しやすくなるために、Gitでは各リモートホストがホスト名を指定する必要があります。 git remoteコマンドは、ホスト名を管理するために使用されます。

1
2
3
4
5
6
$ git remote
origin

$ git remote -v
origin  git@github.com:jquery/jquery.git (fetch)
origin  git@github.com:jquery/jquery.git (push)

オプションはない場合は、すべてのリモートホストを表示します。 オプション「-v」、リモートホストのアドレスを表示します。 上記のコマンドで、リモートホストは1台しかないと見えます、名前は:originです。

レポジトリをcloneするときに、リモートホストの名称は自動的に「origin」で定義して、他の名称を指定したい場合は「-o」で指定

1
2
3
$ git clone -o jQuery https://github.com/jquery/jquery.git
$ git remote
jQuery

上記のコマンドで、リモートホスト名をjQueryで定義する

git remote command 説明
$ git remote show ホストの詳細情報を表示する
$ git remote add
リモートホストを追加する
$ git remote rm リモートホストを削除する
$ git remote rename リモートホストの名称を変更

git fetch

リモートレポジトリで、更新がある場合は、ローカルに取得したいときに、git fetchを使う

1
$ git fetch <host_name>

リモートレポジトリの更新をすべてローカルに取得する 常に、「git fetch」で他人の進捗を確認できて、取得したソースは、ローカルで開発されたソースに影響がありません。 デフォルトとしては、すべてのブランチの更新を取得し、特定のブランチを取得したい場合は、ブランチ名を指定できる。

1
2
3
$ git fetch <host_name> <branch_name>
// 例えば:
$ git fetch origin master

取得した更新は、ローカルで、「host_name/branch」の形式で読み込みです。例えば「origin/master」

git branchのオプション「-r」,リモートブランチを表示。「-a」すべてのブランチを表示する。

1
2
3
4
5
6
$ git branch -r
origin/master

$ git branch -a
* master
  remotes/origin/master

取得した「origin/master」に基づいて、git checkoutコマンド新しいブランチを新規できる

1
$ git checkout -b newBranch origin/master

尚、git mergeとgit rebaseのコマンドで、ローカルブランチにリモートブランチを合併することができる。

1
2
3
$ git merge origin/master
# 或いは
$ git rebase origin/master
現在のブランチに origin/masterをマージする

git pull

リモートブランチの更新を取得して、ローカルで指定するブランチに合併する、完全なフォーマット以下です。

1
$ git pull <remote_host> <remote_branch>:<local_branch>

例えば:originのnextブランチを取得して、ローカルのmasterに合併する、以下の例:

1
$ git pull origin next:master

もし、リモートブランチを現在のブランチに合併すると、「:」以後のlocal_branchを省略できる。

1
2
3
4
5
6
# ** pull == fetch + merge **

$ git pull origin next

$ git fetch origin
$ git merge origin/next
pullコマンドは、ブランチを取得してから、現在のブランチに合併することで、先にgit fetchを行ってから更にgit mergeを行うことと同じです。

ローカルブランチの名は、リモートブランチと同じ場合は、git pullのリモートブランチ名を省略できる

1
$ git pull origin

現在のブランチに一つ追跡ブランチ(remote-tracking branch)しかない場合は、リモート名も省略できる

1
$ git pull

合併は、rebaseモードに必要な場合は、--rebaseで指定できる

1
$ git pull --rebase <remote_host> <remote_branch>:<local_branch>

リモートで、ブランチを削除するときに、デフォルトとして、git pullでローカルのブランチを削除しません。 もし、ローカルで、既にリモートから削除したブランチも削除したい場合は、「-p」で指定できる

1
2
3
4
$ git pull -p
# 等同于下面的命令
$ git fetch --prune origin 
$ git fetch -p

git push

git pushは、ローカルでの修正をリモートにpushする

1
$ git push <remote_host> <local_branch>:<remote_branch>

注意: * ブランチの指定は、git pullと逆です。 * 同じ名称になる場合は、リモートブランチ名も省略できる * リモートブランチが存在しない場合は、新規する

1
$ git push origin master
上記のコマンドは、ローカルのmasterをリモートoriginのmasterにpushする、 [origin/master]が存在しないと、新規する

1
2
3
$ git push origin :master
# 同じ
$ git push origin --delete master
上記のコマンドより、origin/masterを削除する
ローカルのmasterを省略すると、指定するリモートブランチを削除する意味です。空のローカルブランチでリモートブランチにpushしたと理解する もし、現在のブランチはリモートと追跡ブランチ(remote-tracking branch)でしたら、ローカルブランチもリモートも省略できる

1
$ git push origin
上記のコマンドより、現在のブランチをリモートのブランチにpushする 現在のブランチは、一つの追跡ブランチ(remote-tracking branch)しかない場合は、リモートホスト名も省略できる

1
$ git push
現在のブランチは、複数ホストの追跡ブランチ(remote-tracking branch)がある場合は,「-u」でデフォルトホストを指定できる

1
$ git push -u origin master
上記のコマンドは、ローカルのmasterをリモートoriginのmasterにpushするとともに、
originをデフォルトホストとして指定したので、これからの操作は、パラメータを必要なくなる

パラメータなしのgit pushは、デフォルトは現在ブランチのみをpushする、simple方式と呼ばれる。 すべてのローカルブランチをoriginにpushする場合は、[--all]で指定する

1
$ git push --all origin

リモートのバージョンは、ローカルより最新でしたら、pushするときにエラーがある。
この時にローカルでgit pullで合併してから再度git pushでpushする。
もし、どうしてもpushしたい場合は、[--force]で指定できる

1
$ git push --force origin 
上記のコマンドより、リモートの最新バージョンをカバーされる。
できるだけ[--force]を使用することを退避する

最後、git pushはtagをpushしないので、pushしたい場合は[--tags]で指定する

1
$ git push origin --tags

参照先:中国語