Gitを使いこなすための20のコマンド 5ページ

コマンド16:「git tag」-コミットにタグを付ける

 Gitではコミットをハッシュ文字列で管理しているため、ユーザー側から見るとどの文字列がどのコミットを表しているのか分かりにくい。「git tag」は、直前のコミットに対して分かりやすい別名(タグ)を付けるコマンドだ。

$ git tag <タグ名>

 タグ名を指定せずにgit tagを実行すると、現在のリポジトリ内にあるタグを確認できる。

$ git tag rev1    (「rev1」というタグを付ける)
$ git tag         (タグを確認する)
rev1
コマンド17:「git stash」-現在の作業ツリーの状態を一時的に保管する

 現在の作業中の状態をコミットせずに、一時的にほかのブランチに対して作業を行いたい、という場合に役立つのが、「git stash」コマンドだ。このコマンドでは、現在の作業ツリーの状態を一時的に保存しておくことができる。

$ git stash <保存名もしくはコメントなど>

 git stashの実行後は、git checkoutなどで作業したいブランチをチェックアウトすればよい。作業の完了後作業中だった作業ツリーを再度呼び出すには、元のブランチをチェックアウトしてから「git stash pop」コマンドを実行する。また、「git stash list」を実行すると、一時保存されている作業ツリーが一覧表示される。

$ git stash list
$ git stash pop
コマンド18:「git rebase」-ブランチの派生元(上流)を変更する

 「git rebase」は、「ブランチの派生元を変更する」という、CVSやSubversionにはなかったユニークな機能である。git rebaseがどのような処理を行うかは次の図1を参照してほしいが、簡単に言えばあるブランチに対して行った変更点を、派生元のより新しいリビジョンのものに適用するものだ。

図1 「git rebase」のイメージ
図1 「git rebase」のイメージ

 図1の例の場合、ブランチAから派生したブランチBに対して、「変更α」と「変更β」、「変更γ」という3回のコミットを行っている。また、ブランチBを作成したのち、ブランチAには複数のコミットが行われている。このような状態でブランチBに対し「get rebase ブランチA」を実行すると、ブランチAの最新版に対して、ブランチBを作成してからブランチBの最新版までの間に加えられた変更(この場合変更αと変更β、変更γ)が適用され、それがブランチBの最新版となる。

 git rebaseを利用するには、作業を行いたいブランチで次のように実行すればよい。

$ git rebase <派生元ブランチ>

 このとき、もし競合が発生すればgit mergeの場合と同様に競合点がマーカーとともにファイルに記載される。また、「git rebase --abort」でrebaseを取り消すこともできる。

ほかのリポジトリとの連携を行うコマンド

コマンド19:「git pull」-ほかのリポジトリの変更点をローカルリポジトリにマージする

 ほかのリポジトリで加えられた変更点を現在のブランチにマージするには、「git pull」コマンドを利用する。

$ git pull <変更点の取り込み元リポジトリ>

 変更点の取り込み元リポジトリは、git cloneの場合と同様にURLで指定する(表1)。また、git cloneコマンドで作成したリポジトリの場合、.git/config内の「remote」項目などに複製元リポジトリのURLが自動的に記録されるため、複製元リポジトリからpullを行う場合は下記のように取り込み元リポジトリを指定しなくとも実行できる。

$ git pull
コマンド20:「git push」-公開リポジトリに自分のリポジトリの内容を送信する

 git pullはほかのリポジトリの内容を自分のリポジトリに取り込むものだったが、逆に自分のリポジトリの内容をほかのリポジトリ(一般的には公開リポジトリ)に送信して取り込ませるコマンドが「git push」である。

 git pushの引数には、送信先のリポジトリURLと送信するブランチ、送信先ブランチを指定する。

$ git push <送信先リポジトリ> <送信するブランチ>:<送信先ブランチ>

 送信先ブランチを指定しなかった場合は、送信するブランチと同じブランチを指定したものとみなされる。また、送信先ブランチが送信先リポジトリに存在しない場合はそのブランチが作成される。

コラム:公開リポジトリと通常のリポジトリとbareリポジトリ

 Gitの公開リポジトリは通常、管理ファイルのみを持つ「bareリポジトリ」として作成される。通常bareリポジトリでは作業ツリーの変更やコミットといった操作は行わず、ファイルのやりとりにのみ使用する。また、慣例としてbareリポジトリとして使用するディレクトリには「.git」という拡張子が付けられる。

 bareリポジトリは、「--bare」オプションを付けてでgit initを実行することで作成できる。