Linus Benedict Torvaldsの開発した分散型バージョン管理システムGitについて,基礎的な使用方法を記したページです.

目次

  1. 設定
  2. リポジトリの作成
  3. 変更履歴の作成
    1. ステージング
    2. コミット
  4. ファイルを以前の状態に戻す
    1. 変更履歴の表示
    2. リセット
  5. 履歴を確認する
    1. 前回コミットから現在までに編集されたファイルの名前
    2. 前回コミットからステージングまでの差分
    3. ステージングからコミットまでの差分
    4. コミットの履歴
  6. 開発を枝分かれさせる
    1. ブランチ
    2. マージ
  7. リモートで使う
    1. リモートの登録・解除
    2. アップロード・ダウンロード
  8. タグを付ける
  9. エイリアスを作る
  10. 参考文献

設定

Gitをインストールしたら,サブコマンドconfigによりユーザー名と連絡先を登録します.
ここではglobalオプションにより,デフォルト値を設定しています.

git config --global user.name "<name>"
git config --global user.email "<email>"

configサブコマンドで登録した各種設定はlistオプションで確認できます.

git config --list

リポジトリの作成

ディレクトリを新規にリポジトリ化するには,

git init <dir>

とします.
対象となるディレクトリ名を省略した場合,カレントディレクトリがリポジトリ化されます.

既存のレポジトリを複製して利用するには,

git clone <repo>

とします.

変更履歴の作成

変更履歴をリポジトリに登録するには,「ステージング」と「コミット」という2つの段階を踏みます.
「ステージング」はコミットするものを整理・確認する段階です.
「コミット」は変更履歴を記録に残す段階です.

ステージング

ファイルをステージングするには,

git add <file>

とします.
引数をディレクトリにすれば,再帰的にディレクトリをステージングします.
カレントディレクトリのファイル全てをステージングするなら,git add .です.

パスワードや機密情報などステージングしたくないファイルがある場合は,予めレポジトリに.gitignoreファイルを設置して列挙しておきます.
.gitignoreは設置した以下の階層で有効になります.
.gitignoreではワイルドカードも使えます.

誤ってステージングしたファイルがある場合は,

git reset <file>

とすることで,ファイルをそのままにステージングを取り消すことができます.
ファイルを指定しなければステージング自体を取り消します.

ファイルの削除や移動・リネームをステージングするためにgit rm <file>git mv <from> <to>が用意されています.

コミット

ステージングされたファイル一式は,

git commit -m "<message>"

によりコミットします.
ここではmオプションを付けて修正に関するメッセージを文章で残すようにしています.(このオプションを付けない場合,テキストエディタが立ち上がり,メッセージの登録を促されます.)

万一コミットし忘れたファイルがあったり,微修正が発生したときには,git commit --amendとすれば,バージョンを増加させることなく直近のコミットを修正できます.
特に,うっかり誤ったファイルを含めてしまった場合は,不要なファイルを取り除いたり差し替えた状態を新たにステージングした上で,git commit --amend --no-editして直前のコミットを取り消します.

ファイルを以前の状態に戻す

変更履歴の表示

ファイルを以前コミットしたときの状態に戻すために,まず,git logにより変更履歴からコミットのIDを調べます.
このコマンドには便利なオプションが用意されています.

直近n件のコミット履歴を簡潔に1行ずつで表示するには,

git log --oneline -n <int>

とします.

期間を制限する場合は,

git log --since="2016/1/1" --until="2016/12/31"

のようにします.

コミット時のメッセージは

git log --grep="<message>"

で検索できます.

なお,ファイルの編集者やコミットした者はauthorオプションやcommitterオプションで指定できます.

コミットの履歴はgit logで追いますが,git reflogHEADの履歴,git showでファイルの内容,git blameでファイルの修正者と修正日時を追跡できます.

リセット

Gitでは,過去にコミットした地点からいつでもやり直せます.
指定したコミットのバージョンへ戻すには,

git reset --hard <id>

とします.
特に,--hard HEADと書いた場合,直前のコミットへ戻します.

--hardオプションではHEADで現在いる最終コミット,HEAD^で1世代前の(,第1の)親(なお,HEAD^2で1世代前の第2の親),HEAD^^で2世代前のコミットに戻します.(キャレット^でなくティルダ~だと1番目の親を遡っていきます.)

なお,resetの効果は取り消しです.
新たに戻った状態と同じものへ歴史を進めるrevertもあります.
すなわち,reset --hard <id>に代えてrevert <id>とすると,戻った地点以降のコミットを残して戻ります.

特定のファイルを指定したコミットのバージョンへ戻すには,

git restore <id> <file>

とします.

履歴を確認する

前回コミットから現在までに編集されたファイルの名前

最後のコミットから現在までに編集されたファイルの名前を調べるには

git status

とします.(sオプションを付けると,簡潔に表示します.)

前回コミットからステージングまでの差分

差分のある箇所は,ステージング前なら

git diff <事前> <事後>

で調べることができます.

ステージングからコミットまでの差分

ステージング後でコミット前のものについては

git diff --cached <事前> <事後>

で調べることができます.

コミットの履歴

HEADの歴史は

git reflog

で確認できます.

開発を枝分かれさせる

ブランチ

開発を枝分かれさせることで容易に新しいアイデアを試すことができます.

開発の枝分かれを「ブランチ」と言います.
ブランチを作るには

git branch <branch>

とします.
引数なしなら,存在するブランチを一覧します.

ブランチ間の移動は

git switch <branch>

です.

git swich -c <branch>すると,ブランチを新規に作成して,そのブランチへ移動できます.

マージ

あるブランチで開発が進んだら,開発したものを別のブランチへ併合することができます.
これを「マージ」といい,現在のブランチへマージするには,

git merge <branch>

と書きます.
マージによってファイルの「コンフリクト」(競合)が起こるようであれば,ファイルを開いて解決し,その後ステージング→コミットという通常の手続きを踏みます.

コンフリクト多数などの理由によりマージを中断したい場合は,

git merge --abort

としてください.

マージ後,不要になったブランチは

git branch -d <branch>

で切り落とすことができます.

mergeで反映しきっていないブランチを切り落とすには,-d-Dにします.

別のブランチから特定のコミットだけ採り入れることも

git cherry-pick <id>

によって可能です.
コンフリクトの対処はmerge同様です.

リモートで使う

リモートの登録・解除

リモートのリポジトリをまだ登録していないなら,

git remote add <abbr> <url>

によって登録します.
GitHubを利用するのであれば,URLはgit@github.com:<name>/<repo>.gitのような形です.

省略名をリネームするには

git remote rename <old_abbr> <new_abbr>

とします.

登録をローカルにて解除するには

git remote rm <abbr>

とします.

アップロード・ダウンロード

リモートのリポジトリにアップロードすることを「プッシュ」といいます.

git push <remote> <branch>

git cloneしてきた場合にはリモートにoriginが自動設定されるので,masterブランチをアップロードする場合は

git push origin master

のようになります.
mainブランチならgit push origin mainです.

プッシュに競合が生じる場合は対応が必要です.

作業ディレクトリに最新のコミットを複製するには,

git fetch <remote>

とします.
複製からマージまですることを「プル」といい,

git pull <remote>

とします.

タグを付ける

例えば「v2.0.3」のようなタグを付けるには,

git tag <tag> <id>

とします.
コミットIDを省略したら,最後のコミットに対するタグとなります.

反対に,タグを消去するには

git tag -d <tag>

とします.

タグの一覧は,

git tag

で確認できます.

エイリアスを作る

エイリアスは次のように作成します.

git config --global alias.<alias> '<subcmd>'

サブコマンドに対して特にオプションを付けない場合はシングルクオーテーションを省略して構いません.

作成したエイリアスは

git <alias>

の形で使用できます.

参考文献

Gitの解説書です.
Gitのサイトは各国語版でこの書籍の電子版を無償提供しており,日本語版もあります.

  • Scott Chacon and Ben Straub (2014) “Pro Git” 2nd ed. Apress.