メインコンテンツへスキップ

Gitコマンドの個人的まとめ(ブランチ利用なし)

·3222 文字·7 分
目次

はじめに
#

個人的によく使用するGitのコマンドをまとめた。なお、個人利用かつ小規模なソフトウェア開発環境であり、ブランチは作成しないため、それに関連するコマンドは記載していない。

検証環境:Git for Windows v2.27.0

リポジトリのクローン (clone)
#

リモートにあるリポジトリをローカルにクローン(コピー)する。

git clone https://github.com/xxxxx/xxxxxxxx.git

リポジトリの状態を確認する (status)
#

git status

ファイルの追加 (add)
#

ファイルをインデックス(ステージングエリア)に登録する。ファイル名をスペースで区切ることで、複数のファイルを追加できる。また、ファイル名は相対パスまたは絶対パスで指定する。

git add <ファイル名>

Gitで管理していないファイルも含めてインデックスに追加する(カレントディレクトリより上のフォルダ階層も含むリポジトリ全体を処理する)。

$ git add -A
or
$ git add --all

Gitで管理している全てのファイルの変更内容をインデックスに追加する(カレントディレクトリより上のフォルダ階層も含むリポジトリ全体を処理する)。

$ git add -u
or
$ git add --update

コミット (commit)
#

コミット時には、-mオプションの後ろにメッセージを入力する。

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

複数行のコミットメッセージを入力したい場合は、以下のように複数の-mオプションを付ける。

$ git commit -m "コミットメッセージ1" -m "コミットメッセージ2"

または、以下のようにオプションを付けずに実行するとテキストエディタが起動するので、それに入力する。

$ git commit

プッシュする (push)
#

$ git push

ファイルの差分を確認 (diff)
#

git diffでインデックスと作業ツリー(現在ローカルで作業中のディレクトリ)の差分を表示する。ファイル名を指定しない場合は、全ファイルの差分を表示する。

git diff <ファイル名>

特定のコミットとの差分を表示する場合は、ハッシュ値を追加する(ファイル名はオプション)。

git diff <commit> <ファイル名>

また、コミットとインデックスの差分を表示するには、--cachedオプションを追加する(ファイル名はオプション)。

git diff --cached <ファイル名>

git diffのオプションと差分の関係は以下の通り。

┌ git diff --cached <commit> ┐
|    ┌-- git diff --cached --┐
|  HEADコミット         インデックス   作業ツリー
O-----O----------------------O-------------O
|                            └-- git diff -┘
└------------ git diff <commit> -----------┘

さらに、コミット間の比較も可能(ファイル名はオプション)。

git diff <変更前のcommit> <変更後のcommit> <ファイル名>

単語単位で差分を表示する場合は、--word-diffオプションを追加する。さらに文字の色の違いだけで差分を表示させるには、後ろに=colorを追加する。

git diff --word-diff
git diff --word-diff=color

操作の取り消し・修正
#

addの取り消し (reset)
#

git addでファイルの変更がインデックスに登録されるが、その登録を取り消すには以下を実行する。ファイル名を指定しない場合は、全てのファイルのインデックス登録が削除される。なお、以下のコマンドを実行してもファイルの中身は変更されない(HEADコミットの状態には戻らない)。

$ git reset HEAD <ファイル名>

commitの取り消し (reset)
#

直前のコミットを取り消すには以下を実行する。

$ git reset --hard HEAD^

なお、オプションの意味は次の通り。

  • --hard: コミットを取り消した上でワークディレクトリの内容も書き換える。
  • --soft: ワークディレクトリの内容はそのままでコミットだけを取り消す。

また、HEAD^はHEADコミットの1つ前のコミットを意味する。HEAD^の代わりにコミットのハッシュ値としても良い。

コミットメッセージの修正 (ammend)
#

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

$ git commit --amend "修正後のコミットメッセージ"

コミット履歴を確認する (log)
#

$ git log 

また、logの後ろにファイル名を追加すると、そのファイルが関連するコミットのみ表示されるようになる。

主なオプションは以下の通り。

オプション 説明
-<n> n回分の最新コミットを表示
--oneline 1コミットを1行で表示

ファイル操作
#

ファイル削除 (rm)
#

ファイルを削除し、gitの管理からも外す。

$ git rm <ファイル名>

フォルダごと削除し、gitの管理からも外す。

$ git rm -r <フォルダ名>

ファイルをgitの管理から外すが、ファイル自体は作業ツリーに残す。

$ git rm --cached <ファイル名>

ファイル名変更 (mv)
#

$ git mv <元のファイル名> <変更後のファイル名>

ファイルを特定のコミットまで戻す (checkout)
#

$ git checkout <commit> <ファイル名>

最新のコミットに戻したい場合は、ハッシュ値の代わりにHEADでも良い。

ファイル内を検索 (grep)
#

指定したキーワードが含まれるファイル名と、キーワードを含む行を表示する(大文字小文字は区別される)。また、検索対象はカレントディレクトリ以下のフォルダである。

$ git grep "キーワード"

キーワードにスペースが含まれない場合は、ダブルクォーテーションは不要である。 主なオプションは以下の通り。

オプション 説明
-i 大文字小文字を区別しない
-w 単語単位で検索する
-E 正規表現を使う
-n 行番号を表示する

また、AND, OR検索は--and/--orオプションを使う。以下のように各キーワードの前に-eを置いて、--and/--orを挟む。

$ git grep -e "キーワード1" --and -e "キーワード2"

ただし、キーワード1, キーワード2は、ファイルの同じ行になければ検索にヒットしない。さらに、--notオプションを使うとNOT検索もできる。

# 例1: ABCと123を両方含む
$ git grep -e ABC --and -e 123
# 例1: ABCか123の少なくとも片方を含む
$ git grep -e ABC --or -e 123
# 例1: ABCを含むが、123は含まない
$ git grep -e ABC --and --not -e 123

コミットの詳細確認 (show)
#

以下のコマンドで、コミットの日時や、ファイルの差分などが表示される。

$ git show <commit>

なお、<commit>を入力しないと、最新コミットの詳細が表示される(以下と同じ意味)。

$ git show HEAD

エイリアスの登録
#

エイリアスは「別名」の意味。エイリアスを設定することで、長いコマンド(オプションを含む)を短縮した形で呼び出すことができる。エイリアスを設定するには、Gitの設定ファイルを編集する方法と、コマンドから設定する方法の2つがある。また、エイリアスは下表の3階層で設定可能であり、複数の階層で同じエイリアスが設定されている場合には、数字が大きい階層が優先される。

階層 種類 対象範囲
1 system マシン単位
2 global ユーザ単位
3 local リポジトリ単位

設定ファイルを直接編集するには、以下のコマンドを実行する(ユーザ単位の設定ファイルの場合)。

git config --global --edit

マシン単位やリポジトリ単位の設定ファイルを編集するには、--global--system--localにそれぞれ変更する。 実行すると設定ファイルがエディタで開かれるので、以下のようにエイリアスを記述する。

[alias]
    co = checkout
    logo = log --oneline

ここで、[alias]というセクションを作っており、それより後の行にエイリアスを登録する。=の左側にエイリアスを、右側に短縮前のコマンドをそれぞれ記述する。記述が終了したら、エディタを閉じる。 また、コマンドからエイリアスを設定するには、以下のようなコマンドを実行する(ユーザ単位で設定する場合)。

git config --global alias.co checkout
git config --global alias.logo "log --oneline"

マシン単位やリポジトリ単位で設定するには、--global--system--localにそれぞれ変更する。コマンドを実行すると、対応する設定ファイルにエイリアスが登録されている。

ヘルプを読む
#

Gitのコマンドのヘルプを表示するには、以下のいずれかを実行する。

$ git help <verb>
$ git <verb> --help
$ man git-<verb>

参考文献
#

Git - Reference Gitコマンド早見表 - Qiita 【git】aliasの設定方法 - Qiita

Helve
著者
Helve
関西在住、電機メーカ勤務のエンジニア。X(旧Twitter)で新着記事を配信中です

関連記事

非線形計画問題の主双対内点法
·1971 文字·4 分
非線形問題に対する主双対内点法のアルゴリズムについて解説する。
PyomoとCouenneで非凸の混合整数非線形計画問題(MINLP)を解く
··1998 文字·4 分
PyomoというPythonライブラリと、Couenneという最適化ソルバを使って非凸の混合整数非線形計画問題 (MINLP) を解く方法をまとめた。
ナップサック問題と分枝限定法
·3230 文字·7 分
分枝限定法は、組合せ最適化問題の解を効率的に求める手法である。組合せ最適化問題の1つであるナップサック問題を対象に、分枝限定法のアルゴリズムを示す。
等式制約付き最適化問題とラグランジュの未定乗数法 後編
·826 文字·2 分
等式制約付き最適化問題に対する、ラグランジュの未定乗数法についてまとめた。簡単な例題に対して、最適解が満たす幾何学的な意味を示す。
等式制約付き最適化問題とラグランジュの未定乗数法 前編
·1979 文字·4 分
等式制約付き最適化問題に対する、ラグランジュの未定乗数法についてまとめた。 また、簡単な例題を用いて、最適解が満たす幾何学的な意味を示す。
ニュートン法による最適化とPythonによる実装
·1714 文字·4 分
ニュートン法による最適化アルゴリズムへの理解を深めるため、Pythonで実装した。