Gitの基礎 - Gitコマンド

提供:MochiuWiki : SUSE, EC, PCB
ナビゲーションに移動 検索に移動

概要



initコマンド

initコマンドは、新しいGitリポジトリを作成するために使用する。
リポジトリとは、「ファイルやディレクトリの状態を管理する場所」のことである。

一連のGitコマンドは、Gitリポジトリが管理しているディレクトリ内で使用することができる。

initコマンドを実行すると、現在のディレクトリに.gitディレクトリ(Gitリポジトリ)が作成される。
リポジトリが作成されることにより、Gitコマンドでリポジトリを管理できるようになる。

  • -q / --quietオプション
    initコマンドの実行時に表示されるメッセージを省略する。
    ただし、警告とエラーメッセージは表示される。

  • --bareオプション
    ベアリポジトリと呼ばれる特殊なGitリポジトリを作成する。
    --bareを使用することで、対象のディレクトリを.gitディレクトリそのものとして扱う。
    ベアリポジトリには、実際のディレクトリやファイルを持たないが、.gitディレクトリ内にあるファイルのみを持つ。
    ベアリポジトリはpush先となる集約されるようなリポジトリに対して作成する。

    • ベアリポジトリの特徴
      作業用ディレクトリを持たない。
      管理用ディレクトリ(リポジトリ)のみを持つ。
      ベアリポジトリでは、現在のディレクトリが.gitディレクトリそのものになる。

  • --shared=<パーミッション>

    作成しようとしているリポジトリは共有リポジトリとして作成される。
    デフォルトではリポジトリは作成したユーザーのみpushできる。
    複数人で1つのプロジェクトをGitで運用する場合、--sharedオプションで権限を追加します。

    指定できるパーミッション : falsetrueumaskgroupallworldeverybody0xxx
    false / umask : umaskの値を利用する。--sharedオプションを使用しない場合も適用される。
    true / group  : グループに対して書き込み権限を追加する。
    all / world / everybody : グループに対して書き込み権限を追加して、その他のユーザに対して読み込み権限を追加する。
    0xxx : 4桁の数値でパーミッションを指定する。

  • -b <ブランチ名> または --initial-branch=<ブランチ名>
    初期化時に自動で作成されるブランチ名を指定する。
    デフォルトでは、masterブランチが自動的に作成されるが、それ以外のブランチ名にする場合はこのオプションを使用する。
    デフォルトのブランチ名は環境変数init.defaultBranchで設定されているため、これを変更することにより、デフォルトのブランチ名を設定することもできる。

  • --object-format=<ハッシュ関数名>オプション
    例. 使用できるハッシュ関数 : sha1(デフォルト)、sha256
    gitはプロジェクトの状態をオブジェクトで管理している。
    数種類のオブジェクトがあるが、オブジェクトは全てzlibで圧縮されハッシュ値が生成されている。
    --object-formatオプションでは、ハッシュ値のハッシュ関数を指定することができる。

  • --template=<テンプレートディレクトリ名>オプション
    テンプレートとなるディレクトリ(TEMPLATE DIRECTORY)を指定する。
    TEMPLATE DIRECTORYを事前に設定することにより、同じような状態を再現することができる。

  • --separate-git-dir=<Gitリポジトリにするディレクトリ>
    initコマンドの実行時では.gitディレクトリが自動的に作成されるが、--separate-git-dirオプションを指定することにより、.gitディレクトリの代わりに.gitテキストファイルを作成される。
    .gitテキストファイルには<Gitリポジトリにするディレクトリ>で指定されたディレクトリのパスが記載されている。
    .gitディレクトリに作成されていた一連のファイルは全てこの指定したディレクトリに置かれる。

    既に存在するGitリポジトリ内において、git init --separate-git-dirを実行すると、Gitリポジトリは<Gitリポジトリにするディレクトリ>に移動する。

    <Gitリポジトリにするディレクトリ>をGitリポジトリとして扱い、<通常のGitディレクトリ>をワーキングディレクトリとして扱うことができる。
    ワーキングディレクトリではGitコマンドが使用できるが、.gitディレクトリが存在しないため、ファイル検索をスムーズに行うことができる。

    また、.gitディレクトリを隠すことにより、誤ってファイルを書き換えてしまうことを防ぐこともできる。



ステージング

git addコマンドは、作業ツリーにあるファイルやディレクトリをステージする。

ファイルのステージング

# 各ファイルを1つずつステージする場合
git add README.txt


既にステージされているファイルやディレクトリにおいて、作業ツリーから全てステージする場合は、-uオプションを付加する。
これは、作業ツリーから全てステージするファイル名を指定せずに、現在、Gitの管理下にあるファイルが作業ツリーから全てステージすることができる。

git add -u
# または
git add -u .


ディレクトリのステージング

git addコマンドの引数にディレクトリを指定する場合、そのディレクトリ直下にある全てのファイルとディレクトリをステージに入れる。

ただし、Gitは空のディレクトリを管理しない。
空のディレクトリを管理する場合は、そのディレクトリに空のダミーファイル (.gitkeepという名前にすることが多い)、あるいは、.gitignoreファイルを入れてステージするとよい。

全てのステージング

プロジェクト内の全てのファイルとディレクトリをGitの管理下に置くことができる。
ただし、バージョン管理しないファイルおよびディレクトリ (自動的に生成されるファイルやログファイル等) も管理下に入ることに注意する。

git add .



コミット

コミットの実行

ステージの内容をコミットする。

git commit


コミットに関するメッセージ (コミットメッセージ) を記述するため、Gitで指定したエディタが起動する。
表示されたファイルの上部に、コミット内容を記載する。

# ここにコミット内容を記載する
<コミット内容  例: hoge.txtファイルを追加>

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# On branch master
#
# Initial commit
#
# Changes to be committed:
#	new file:   hoge.txt
#


コミットメッセージの記述方法

コミットメッセージは、該当するコミットでの変更を後から知るための情報である。
以前のコミットに戻す場合、コミットメッセージが不明瞭だとチェックアウトして確認しなければならない。

コミットメッセージは、慣習的に以下に示すような形式で記述する。

  • 1行目は、要約を記述する。
  • 2行目は、空行を1つ入れる。
  • 3行目以降は、詳しい説明を記述する。


# コミットメッセージの例
hoge.txtファイルを作成

このプロジェクトを説明するhoge.txtファイルを作成した。
このファイルは、◯◯をするものである。


もし、コミットメッセージが1行の場合は、git commit -m "<コミットメッセージ>"コマンドを実行する。

git commit -m "<コミットメッセージ>"


コミットの中止

編集中のコミットメッセージの全ての行を削除・保存してエディタを終了する場合、Gitはコミットの中止と判断してコミットを取りやめる。
ただし、#で始まる行は残っていても構わない。

コミットの閲覧

直近のコミット履歴を見る。

git log


各コミットを1行で表示する。

git log --oneline


ブランチの分岐も表示する。

git log --graph --oneline --all --decorate


詳細情報を含めて表示する。

# 変更されたファイルと行数を表示
git log --stat

# 実際の変更内容 (差分) も表示
git log -p


特定の条件で検索する。

# 直近のN件だけ表示
git log -n 5


特定の日付以降のコミットを見る。

git log --since="2024-01-01"


特定の著者のコミットを見る。

git log --author="ユーザー名"


コミットメッセージで検索する。

git log --grep="<検索するコミットメッセージ>"


特定のコミットの詳細を見る。

# コミットハッシュを指定
git show <コミットハッシュ>


変更されたファイルだけを見る。

git log --name-only


コミット履歴が長い場合は、[スペース]キーで次のページに進み、[q]キーで終了できる。

より視覚的に確認する場合は、gitkというGUIツールを使用する。

gitk --all


コミットのハッシュ

コミットを特定する場合、そのコミットのハッシュを使用する。
これは、コミットの内容をSHA-1ハッシュ関数に掛けて得られる値である。

Gitは、このハッシュ値をコミットを識別するIDとして使用する。
コミット時に表示される16進数の値は、コミットのハッシュの先頭の7桁である。

Gitは、現在のコミット (最新のコミット) を指すポインタを保持しており、このポインタをHEADという。

コミットを行った場合は、HEADは自動的に該当するコミットに移動する。


ブランチ

過去のコミットに戻る

例えば、不具合等が発生した時、発生箇所を突き止めるため一時的に過去のコミットに戻りたい場合がある。
また、併せて、最新のコミットに戻す場合も記載する。

まず、操作するブランチを確認する。

git branch

# 出力例
* master
dev


次に、戻りたいコミット名を確認する。

git log

# 出力例
commit 13gsd8g9skegjaosdjgnaewiura7g (HEAD)
Author: name <name@google.com>
Date:   Tue Jul 13 13:00:00 2021 + 0900

commit ckawijsgs863462wijngoasgeni1a
Author: name <name@google.com>
Date:   Tue Jul 13 10:00:00 2021 + 0900


次に、戻りたいコミット名を指定してgit checkoutコマンドを実行する。
コミット名は、先頭から5文字目以降は省略可能である。

git checkout <コミット名>


過去のコミットに戻した状態で、現在のブランチを確認する。

過去のコミットに戻ると、操作しているブランチとは異なるブランチが一時的に作成される。
そのため、最新のコミットに戻す場合は、ブランチを変更すればよい。

git branch 

# 出力例
* (HEAD detached コミット名)
master
dev


最新のコミットに戻す。

git checkout <ブランチ名>


ブランチの非アクティブ (削除)

ブランチを削除する前に、以下に示す事柄を確認することを推奨する。

  • 削除するブランチの変更が必要ないことを確認する。
  • 重要な変更が他のブランチにマージされていることを確認する。
  • 現在使用しているブランチでないことを確認する。
    git branchコマンドで確認可能


ローカルブランチの削除
# ブランチ hoge を削除
git branch -d hoge

# ブランチ piyo を削除
git branch -d piyo


もし、変更がマージされていない場合は、-dオプションでは削除できずに警告が表示される。
強制的に削除する場合は、-Dオプションを使用する。

# 強制削除する場合
git branch -D hoge
git branch -D piyo


リモートブランチの削除
# リモートブランチの削除
git push origin --delete hoge
git push origin --delete piyo