Git

Gitとは分散型のバージョン管理ツールです。

Debian

UbuntuやLinux Mintなど、DebianベースのLinuxディストリビューションの場合、apt-get コマンドを使ってgitをインストールする。

$ sudo apt-get install git

--help

Gitのコマンド一覧を表示する。

$ git --help
usage: git [--version] [--help] [-C <path>] [-c <name>=<value>]
           [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
           [-p | --paginate | -P | --no-pager] [--no-replace-objects] [--bare]
           [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]
           <command> [<args>]

These are common Git commands used in various situations:

start a working area (see also: git help tutorial)
   clone             Clone a repository into a new directory
   init              Create an empty Git repository or reinitialize an existing one

work on the current change (see also: git help everyday)
   add               Add file contents to the index
   mv                Move or rename a file, a directory, or a symlink
   restore           Restore working tree files
   rm                Remove files from the working tree and from the index
   sparse-checkout   Initialize and modify the sparse-checkout

examine the history and state (see also: git help revisions)
   bisect            Use binary search to find the commit that introduced a bug
   diff              Show changes between commits, commit and working tree, etc
   grep              Print lines matching a pattern
   log               Show commit logs
   show              Show various types of objects
   status            Show the working tree status

grow, mark and tweak your common history
   branch            List, create, or delete branches
   commit            Record changes to the repository
   merge             Join two or more development histories together
   rebase            Reapply commits on top of another base tip
   reset             Reset current HEAD to the specified state
   switch            Switch branches
   tag               Create, list, delete or verify a tag object signed with GPG

collaborate (see also: git help workflows)
   fetch             Download objects and refs from another repository
   pull              Fetch from and integrate with another repository or a local branch
   push              Update remote refs along with associated objects

'git help -a' and 'git help -g' list available subcommands and some
concept guides. See 'git help <command>' or 'git help <concept>'
to read about a specific subcommand or concept.
See 'git help git' for an overview of the system.

--version

Gitのバージョンを表示する

$ git --version
git version 2.25.1

add

git addは、作業ディレクトリの内容をステージングエリアに追加するコマンドである。このコマンドは、個々のファイルの更新内容を次回コミットの対象となることをGitに指示する。

git add path

pathにはファイルまたはディレクトリのパスを指定する。ディレクトリのパスを指定した場合は、ディレクトリ内のすべての変更をステージして次回のコミットの対象とする。

ブランチの一覧を表示する

ブランチの一覧を表示するには、引数を指定せずにgit branchコマンドを実行する。

git branch

ブランチを作成する

ブランチを作成するには、新たに作成するブランチの名前を指定してgit branchコマンドを実行する。

git branch foo

ブランチを削除する

ブランチを削除するには、git branchコマンドにdオプションを付けて実行する。

git branch -d foo

リモートのブランチを削除するには、ブランチを削除した後にプッシュする。

git branch -d foo
git push origin :foo

checkout

checkout はローカルリポジトリからファイルをチェックアウトするGitコマンドである。

git checkout [-b] branch-name

ブランチを切り替える。

git checkout foo

ブランチを作成して、そのブランチに切り替える。

$ git checkout -b foo
Switched to a new branch 'foo'

編集したファイルをコミット時の状態に戻すには、ローカルリポジトリからファイルをチェックアウトする。

  1. ファイルの状態を確認する。
    $ git status
  2. ローカルリポジトリからファイルをチェックアウトする。
    $ git checkout example.txt

clone

git cloneは、既存のGitリポジトリのコピーを作成するコマンドである。リポジトリのクローンを行うと、元のリポジトリを指すoriginという名前のリモート接続が自動的に作成される。これにより、簡単に中央リポジトリとの通信を行うことができる。中央リポジトリから開発者の作業コピー(ローカルリポジトリ)を新たに作成する場合は、git cloneコマンドを使用する。

git clone [--template=template-directory] [-l] [-s]
[--no-hardlinks] [-q] [-n] [--bare] [--mirror] [-o name]
[-b name] [-u upload-peak] [--reference repository] [--separate-git-dir git-dir] [--depth depth] [--[no-]single-branch] [--recursive|--recurse-submodules]
[--] repository [directory]

リモートリポジトリを複製する例を次に示す。

$ git clone c:/repo
Cloning into 'repo'...
done.

既存のGitリポジトリ(GitHub)のクローン(複製)を作成する。

$ git clone https://github.com/account/example.git

commit

git commitは、ステージされたファイルをローカルリポジトリにコミットするコマンドである。変更をコミットするには、原則としてgit addコマンドでファイルをステージしておく必要がある。

git commit [-m "message"]

このコマンドには次に示すオプションを指定することができる。

-m "message"
コミットメッセージを指定する。-mオプションを指定しなかった場合は、テキストエディタが起動されてコミットメッセージの入力を求められる。

コミットする例を次に示す。

$ git commit -m "first commit"

コミットメッセージは git log コマンドで確認することができる。

ファイル名を指定してコミットする

ファイル名を指定することにより、特定のファイルをコミットすることもできる。

git commit example.txt

変更されたすべてのファイルをコミットする

-a オプションを指定することにより、変更されたすべてのファイルをコミットすることもできる。この場合、新規作成されたファイルはコミットされない。

git commit -a

コミットされる変更とgit commitコマンドの関係を次に示す。

コマンド ステージされた変更・追加 ステージされていない変更 ステージされていない追加
git commit コミット - -
git commit -a コミット コミット -

いちいち変更したファイルを git add コマンドでステージするのは面倒なので、git commit -a コマンドの方が便利である。ただし、新規作成したファイルをステージするのを忘れないこと。

ファイルを変更したもののうち、コミットしたくないものがある場合は、面倒でもひとつづつ git add コマンドでステージしてから git commit コマンドでコミットする。

diff

git diff [options] [commit] [--] [path...]
git diff [options] --cached [commit] [--] [path...]
git diff [options] commit commit [--] [path...
git diff [options] blob blob
git diff [options] [--no-index] [--] path path

fetch

git fetch [options] [repository [refspec..]]
git fetch [options] group
git fetch --multiple [options] [(repository|group)...]
git fetch --all [options]

help

helpコマンドは、Gitに関するヘルプ情報を表示するコマンドである。

git help [-a|--all] [-g|--guide] [-i|--info|-m|--main|--web] [COMMAND|GUIDE]

Git を紹介するチュートリアルを表示する。

$ git help tutorial

便利な最小限のGitコマンドを表示する。

$ git help everyday

Gitのリビジョンと範囲の指定を表示する。

$ git help revisions

Gitを使った推奨ワークフローの概要を表示する。

$ git help workflows

init

git initはGitリポジトリを新たに作成するコマンドである。このコマンドは、バージョン管理を行っていない既存のプロジェクトをGitリポジトリに変換する場合や、空の新規リポジトリを作成して初期化する場合に使用する。

git init [--bare] [directory]

directoryで指定したパスに空のGitリポジトリを作成する。directoryの指定を省略した場合は、カレントディレクトリをGitリポジトリに変換する。

git initコマンドには次に示すオプションを指定することができる。

--bare
作業ディレクトリを持たない空のGitリポジトリを作成する。共有リポジトリは必ず--bareフラグを指定して作成しなければならない。作業ディレクトリを持たないリポジトリでは、ファイルの編集やコミットをすることはできない。

リポジトリを作成するには、次の手順で操作する。

  1. フォルダを作成する。
    C:\repo
  2. Git Bashを起動する。
  3. フォルダに移動する。
    $ cd /c/repo
  4. 初期化する。
    $ git init
    Initialized empty Git repository in c:/repo/.git/

共有リポジトリを作成するには、次の手順で操作する。

  1. ディレクトリ(フォルダ)を作成する。
  2. 作成したディレクトリ(フォルダ)に移動する。
  3. 共有として初期化する。
    $ git init --bare --shared=true

log

git logは、コミット済みの履歴を表示するコマンドである。

git log [-n limit] [--oneline] [--stat] [-p]

このコマンドには次の示すオプションを指定することができる。

-n limit
表示するコミットをlimitに制限する。
--oneline
コミットの内容を1行に圧縮して表示する。
--stat
改変されたファイル及びその中での追加行数と削除行数を増減数で表示する。
-p
各々のコミットに対応するパッチを表示する。コミット履歴から取得できる詳細な情報である各々のコミットの完全な差分情報が表示される。
git log > /tmp/log.txt

ls-files

ls-files はファイルの一覧を表示するGitコマンドである。

コンフリクト(競合)を解消するには、次の手順で操作する。

  1. コンフリクトしているファイルの一覧を表示する。
    $ git ls-files -u
  2. ファイルの状態を表示する。
    $ git status
  3. ファイルを修正する。
  4. 修正したファイルをインデックスに追加する。
    $ git add foo.php

merge

git merge [-n] [--stat] [--no-commit] [--squash] [--[no-]edit] [-s strategy] [-X strategy-option] [--[no-]rerere-autoupdate] [-m msg] [commit...]
git merge msg HEAD commit...
git merge --abort

フェッチとマージを行うには、次の手順で操作する。

  1. フェッチする。
    $ git fetch
  2. ログを見る。
    $ git log FETCH_HEAD
  3. ローカルリポジトリに取り込んだ変更内容を確認する。
    $ git diff FETCH_HEAD
  4. マージする。
    $ git merge FETCH_HEAD
  5. リモートリポジトリの更新動作を確認する(実際には更新しない)。
    $ git push -n origin master:master
  6. リモートリポジトリを更新する。
    $ git push origin master:master

mv

git mvは、ファイルやディレクトリの名前を変更したり、場所を移動するコマンドである。変更前のファイルを削除(git rm)して、変更後のファイルをステージング(git add)する。また、ワーキングコピーのファイルも実際に名前変更や移動が行われる。

git mv [-v] [-f] [-n] [-k] source destination
git mv [-v] [-f] [-n] [-k] source... destination-directory

ファイルfoo.phpbar.phpに変更する例を示す。

git mv foo.php bar.php

pull

git pull [options] [repository [refspec..]]

リポジトリからプル

git pull repository refspec...
$ git pull origin master

push

リモートリポジトリにプッシュする。

git push repository refspec...

repositoryには以下のように指定する。

プロトコル 指定方法
rsync rsync://host-name/git-repository-path
HTTP http://host-name[:port-no]/git-repository-path
HTTPS https://host-name[:port-no]/git-repository-path
git git://host-name[:port-no]/git-repository-path
SSH ssh://[user-name@]host-name[:port-no]/git-repository-path
file [file://]git-repository-path
$ git push origin master

This repository moved. Please use the new location:

git push したときに、次のメッセージが表示されることがあります。

remote: This repository moved. Please use the new location:
remote:   https://github.com/user/old.git
To https://github.com/user/new.git

このときは、次のコマンドを実行します。

git remote set-url origin https://github.com/user/new.git

remote

remote はリモートリポジトリの情報を表示するGitコマンドである。

存在するリモートリポジトリの一覧を表示する。

$ git remote

存在するリモートリポジトリの詳細を表示する。

$ git remote -v

リモートリポジトリの情報を表示する。

$ git remote show origin

gitコマンドでリモートリポジトリを指定する場合、URLで指定する。しかし、URLは文字数が多いうえ分かりにくい。そこで、短くてわかりやすい別名をリモートリポジトリに付けることができる。リモートリポジトリに付けた別名は.git/configファイルに保存される。

$ git remote add remote-name url

rm

rm はファイルを削除するGitコマンドである。

コミットしたファイルの削除するには、次の手順で操作する。

  1. ファイルを削除する。
    $ git rm foo/bar
  2. 削除予定を確認する。
    $ git status
    # On branch master
    # Changes to be committed:
    #   (use "git reset HEAD <file>..." to unstage)
    #
    #       deleted:     foo/bar
    #
  3. コミットする。
    $ git commit -m "delete foo/bar"

status

git statusは、作業ディレクトリの状態を表示するコマンドである。このコマンドを実行すると、ステージされた変更内容、ステージされていない変更内容及びGitによる追跡の対象外となっているファイルが表示される。

$ git status

.gitignore

Gitで管理しないファイルを明示的に指定するには、.gitignore という名前でファイルを作成し、その中にGitで管理しないファイル名を記述する。

.gitkeep

Gitでは、中身が空のディレクトリをバージョン管理下に入れることはできない。空のディレクトリをバージョン管理下に入れるためには、ディレクトリの中に何か適当なダミー・ファイルを作成しておく必要がある。このときのファイル名は何でも構わないが、慣習的に .gitkeep というファイル名が用いられることが多い。

GitHub

GitHubでリポジトリを作成するには、GitHubにログインして、「New」ボタンをクリックする。

「Create a new repository」画面で、必要な項目を入力する。

項目 説明
Repository name リポジトリ名
Description リポジトリの説明
Public パブリックリポジトリ
Private プライベートリポジトリ
Initialize this repository with a README リポジトリを初期化する
Add .gitignore .gitignoreファイルを追加する
Add a license オープンソースライセンスを追加する

Publicを選択すると、誰でもこのリポジトリを見ることができる。誰がコミットできるかは選択できる。

Privateを選択すると、誰がこのリポジトリを見たりコミットできるかを選択できる。

「Initialize this repository with a README」にチェックを入れると、すぐに自分のコンピュータにリポジトリをクローンすることができるようになる。既存のリポジトリをインポートする場合は、チェックを外す。

必要な項目を入力して、「Create repository」ボタンをクリックすると、リポジトリが作成される。

既存のリポジトリをインポートする

すでに自分のコンピュータにリポジトリを作成している場合は、Git Bashで該当フォルダに移動して、次の手順を行う。

git init
git add index.html
git commit -m "first commit"
git remote add origin https://github.com/user/repository.git
git push -u origin master

参考文献

git(1)

Git - Reference