システム開発でよく使うGitコマンド備忘録(基本~応用まで)

技術

システム開発を行う上で、開発環境はお客さまとなる会社によって多種多様です。
バージョン管理ツールもその一つで、SVNをメインに使う企業もあれば、Gitをメインに使う企業もあります。

Gitは現在、広く利用されているバージョン管理ツールのひとつですが、
実際の現場では「基本的な操作はわかるものの、細かいコマンドがすぐに思い出せない」
といった場面も少なくありません。

筆者自身もGitを利用する案件の経験が少なかったこともあり、
いざGitを使うとなったときに、その操作で戸惑う場面が多くありました。

そこで本記事では、これらを知っていれば困ることは少ないだろうと思われるGitコマンドを、
備忘録も兼ねてまとめています。

Gitを使い始めたばかりの方や、久しぶりにGitに触れる方の参考になれば幸いです。

よく使うGitコマンドたち

リポジトリの状態を確認する

git status

作業ディレクトリとステージングエリア、現在のブランチの状態などを確認するコマンドです。

# git status

以下のような情報を確認する際によく使用します。
・変更されたファイルの有無
・git add 済みのファイル
・現在作業中のブランチ

git log

Gitのコミット履歴を確認する際に使用するコマンドです。

# git log

以下のような情報を確認する際によく使用します。
・過去のコミット履歴
・コミットメッセージやコミットした日時

git branch

現在、存在しているローカルブランチの一覧を確認する際に使用するコマンドです。

# git branch

以下のような情報を確認する際によく使用します。
・ローカルブランチの一覧
・現在作業中のブランチ

リモートリポジトリとの同期

git fetch

リモートリポジトリの最新の変更内容を取得するためのコマンドです。
ローカルのブランチや作業内容には反映されません。

# git fetch

以下のような場合によく使用します。
・リモートリポジトリの最新状態を確認したいとき
・マージやpullを行う前に最新の変更内容を取得したいとき

git pull

リモートリポジトリの最新の変更内容を取得し、作業ブランチに反映するコマンドです。
内部的には、git fetch と git merge をまとめて実行しています。

# git pull

以下のような場合によく使用します。
・リモートリポジトリの変更内容を作業ブランチに反映したいとき
・最新の状態を取得して、そのまま作業を続けたいとき

※変更内容が自動的にマージされるため、リモートリポジトリと作業ブランチで同じ箇所に変更があった場合、コンフリクトが発生することがあります。

git push

ローカルリポジトリでコミットした内容を、リモートリポジトリに反映するコマンドです。

# git push

以下のような場合によく使用します。
・ローカルで行った変更をリモートリポジトリに反映したいとき

git merge

引数に指定したブランチの変更内容を、現在の作業ブランチに反映するコマンドです。

# git merge <ブランチ名>

以下のような場合によく使用します。
・別のブランチで行った変更内容を作業ブランチに反映したいとき

※マージの内容によっては、git pull と同じようにコンフリクトが発生する場合があります。

ブランチを操作する

git branch

ブランチの作成や削除といった操作を行うコマンドです。

ブランチの作成

# git branch <ブランチ名>

ブランチの削除

# git branch -d <ブランチ名>

git checkout

ブランチの切り替えやファイルの復元など、複数の操作を行うことができるコマンドです。
非常に多機能ですが、その分用途がわかりにくいこともあり、
Git 2.23以降はブランチの切り替えやファイルの復元といった一部の操作について、
git switch や git restore の使用が推奨されています。

ブランチの切り替え

引数に指定したブランチに切り替えます。
Git 2.23以降では、後述の git switch の使用が推奨されています。

# git checkout <ブランチ名>
ブランチを作成し、作成したブランチに切り替え

引数に指定したブランチ名でブランチを作成し、そのブランチに切り替えます。
この操作についても、Git 2.23以降は後述の git switch -c の使用が推奨されています。

# git checkout -b <ブランチ名>
ファイルの復元・編集内容の取消

指定したファイルをローカルブランチの内容で復元します。
この操作についても、Git 2.23以降は後述の git restore の使用が推奨されています。

# git checkout <ファイル名>

git switch

Git2.23以降に導入されたブランチ切り替えに特化したコマンドです。
ブランチの切り替え操作は、 git checkout ではなく git switch の使用が推奨されています。

ブランチの切り替え

引数に指定したブランチに切り替えます。

# git switch <ブランチ名>
ブランチを作成し、作成したブランチに切り替え

引数に指定したブランチ名でブランチを作成し、そのブランチに切り替えます。

# git switch -c <ブランチ名>

git restore

Git 2.23以降に導入されたファイルの復元に特化したコマンドです。
ファイルの復元操作は、 git checkout ではなく git restore の使用が推奨されています。

ファイルの復元・編集内容の取消

指定したファイルを現在のブランチの内容で復元します。

# git restore <ファイル名>

作業内容を確認・比較する

git diff

作業ツリーやステージングエリア、コミット間における変更差分を確認するコマンドです。

全ファイルの変更内容の確認

作業ブランチ内における、全ファイルの変更内容が確認できます。

# git diff 
ステージング(git add)済みファイルの変更内容の確認

ステージング(git add)されたファイルの変更差分を確認する際に使用します。

# git diff --cached
任意のファイルの変更内容を確認

特定のファイルのみ変更内容を確認したい場合は、ファイル名を指定します。
ステージング済みのファイルの場合は、上述の –cached オプションと組み合わせて使用します。

# git diff <ファイル名>
ファイル毎の変更量の確認

変更内容ではなく、ファイル毎の変更行数を確認できます。
大量のファイルを更新する際、意図しない変更が含まれていないかを、
パッと確認したいときに便利なオプションです。

# git diff --stat
コミット間における変更差分の確認

指定した2つのコミット間における変更差分を確認できます。
コミットのSHA値は、前述の git log コマンドで確認できます。

# git diff <コミットSHA値1> <コミットSHA値2>

以下のように「^」を付与すると、指定したコミットの1つ前のコミットとの変更差分を確認できます。
※「^」を二つ三つと増やすことで、2つ前3つ前…のコミットとの変更差分も確認できます。

# git diff <コミットSHA値1>^ <コミットSHA値1>
ヒストグラム方式による差分表示

差分検出の方法をヒストグラム方式に変更するオプションです。
通常の git diff では、Myers方式と呼ばれるアルゴリズムにより差分検出が行われますが、
これをヒストグラム方式と呼ばれる別のアルゴリズムで行います。
行の追加・削除やファイルの入れ替えが多い場合、Myers方式よりも差分が見やすいことがあります。

# git diff <コミットSHA値1> <コミットSHA値2> --histogram
差分を関数(メソッド)単位で表示

変更差分を関数(メソッド)単位のまとまりで表示するオプションです。
差分箇所の前後も含めて表示されるため、処理の流れと合わせて修正内容を確認したい場合に便利です。

# git diff <コミットSHA値1> <コミットSHA値2> -W

変更内容を記録する

git add

作業ブランチで変更したファイルを、ステージングエリア(インデックス)に追加するコマンドです。
ステージングエリアに追加されたファイル、次のコミット対象となります。

# git add <ファイル名>

git commit

ステージングエリアに追加された作業内容を、リポジトリに記録するコマンドです。

作業内容のコミット

ステージングされた変更内容をコミットします。

# git commit

上記のようにオプションなしでコミットを実行した場合、テキストエディタが起動します。
ここでコミットメッセージを入力し、保存・終了することでコミットが完了します。

直前のコミットメッセージを修正

直前のコミットメッセージを修正したい場合は、以下のコマンドを実行します。

# git commit --amend
直前のコミットのAuthor(作者情報)を修正

直前のコミットの作者情報を修正したい場合は、以下のようにオプションを指定します。

# git commit --amend --author="tanaka taro <tanaka@example.com>"

応用的な操作

git cherry-pick

特定のコミットを、別のブランチに適用するコマンドです。
必要なコミットだけを選択的に取り込みたい場合に使用します。

特定のコミットをマージし、コミットする

指定したコミットの変更内容を、現在のブランチに適用し、新しいコミットとしてリポジトリに記録します。
※ git merge と同様、適用内容次第でcherry-pick 実行時にコンフリクトが発生する場合があります。

# git cherry-pick <コミットSHA値>
特定のコミットをマージのみ行う

上述と同様に指定したコミットの変更内容を、現在のブランチに適用しますが、
上述とは異なり適用後にコミットは行われません。

適用後のファイルはステージングエリアに追加されるため、
内容を確認・調整した上で手動でコミットしたい場合に使用します。

# git cherry-pick -n <コミットSHA値>
複数の連続したコミットをマージ

上述で紹介したコマンドは単一のコミットを指定しています。
以下のようにコミットを範囲で指定することで、複数の連続したコミットをまとめて適用できます。

# git cherry-pick <開始コミットSHA値>^..<終了コミットSHA値>

コメント