Gitコマンドリファレンス - よく使うコマンドをまとめた早見表

Gitの実務でよく使うコマンドをまとめたリファレンス。コマンドごとに用途と主要オプションを掲載している。

初期設定

git config --global user.name "名前"
git config --global user.email "メールアドレス"
git config --global core.editor "vim"        # エディタ設定
git config --list                             # 設定の一覧表示

プロジェクトごとに設定を上書きする場合は --global を省略する(--local または省略で同じ)。

リポジトリの作成・取得

コマンド説明
git initカレントディレクトリをリポジトリとして初期化
git init <ディレクトリ>指定ディレクトリにリポジトリを作成
git clone <URL>リモートリポジトリをクローン
git clone <URL> <ディレクトリ>指定名のディレクトリにクローン
git clone --depth 1 <URL>最新コミットのみ取得(shallow clone)

変更の確認

git status                  # 変更ファイルの一覧
git status -s               # 短縮形式で表示
git diff                    # 未ステージの変更を表示
git diff --staged           # ステージ済みの変更を表示
git diff HEAD               # 直前のコミットとの差分
git diff <ブランチ1>..<ブランチ2>  # ブランチ間の差分

ステージングとコミット

git add <ファイ>           # 特定ファイルをステージ
git add .                   # カレントディレクトリ以下を全てステージ
git add -p                  # 変更を部分的に選択してステージ(対話的)
git add -u                  # 追跡済みファイルの変更のみステージ

git commit -m "メッセージ"   # コミット
git commit -am "メッセージ"  # add + commit(追跡済みファイルのみ)
git commit --amend          # 直前のコミットを修正(未プッシュのみ推奨)

ログの確認

git log                          # コミット履歴
git log --oneline                # 1行形式
git log --oneline --graph        # ブランチのグラフ表示
git log --oneline --graph --all  # 全ブランチを含む
git log -n 10                    # 直近10件
git log --author="名前"          # 特定ユーザーのコミット
git log --since="2024-01-01"     # 日付で絞り込み
git log <ファイ>               # 特定ファイルの変更履歴
git show <コミットID>            # 特定コミットの詳細

ブランチ操作

git branch                       # ローカルブランチ一覧
git branch -a                    # リモート含む全ブランチ一覧
git branch <ブランチ>          # ブランチ作成
git branch -d <ブランチ>       # ブランチ削除(マージ済みのみ)
git branch -D <ブランチ>       # ブランチ強制削除
git branch -m <> <>      # ブランチ名変更

# チェックアウト(切り替え)
git switch <ブランチ>          # ブランチ切り替え(Git 2.23+)
git switch -c <ブランチ>       # 作成して切り替え(Git 2.23+)
git checkout <ブランチ>        # ブランチ切り替え(旧来の書き方)
git checkout -b <ブランチ>     # 作成して切り替え(旧来の書き方)

git switch は Git 2.23 で追加されたコマンドで、checkout の切り替え機能を分離したもの。新しい環境では switch を使うのが推奨される。

マージとリベース

# マージ
git merge <ブランチ>           # 指定ブランチをマージ
git merge --no-ff <ブランチ>   # マージコミットを強制作成
git merge --squash <ブランチ>  # コミットをまとめてマージ(コミットは別途必要)
git merge --abort               # マージを中断

# リベース
git rebase <ブランチ>          # 指定ブランチ上にリベース
git rebase -i HEAD~3            # 直近3コミットを対話的に操作
git rebase --continue           # 競合解消後に再開
git rebase --abort              # リベースを中断

マージとリベースの使い分け

操作用途
mergeコミット履歴を保持したい場合、チームリポジトリへの統合
rebase履歴を整理したい場合、共有前のローカルブランチ整理

リベースは公開済みのコミットに使うと他の開発者の履歴と競合するため注意が必要。

リモート操作

git remote -v                            # リモートリポジトリ一覧
git remote add origin <URL>              # リモートを追加
git remote rename origin upstream        # リモート名変更
git remote remove <>                 # リモート削除
git remote set-url origin <URL>          # リモートのURLを変更

git fetch                                # リモートの変更を取得(マージしない)
git fetch origin                         # originから取得
git pull                                 # fetch + merge
git pull --rebase                        # fetch + rebase

git push origin <ブランチ>             # プッシュ
git push -u origin <ブランチ>          # 上流ブランチを設定してプッシュ
git push --force-with-lease              # 安全な強制プッシュ(他の変更がなければ)
git push origin --delete <ブランチ>    # リモートブランチを削除

--force は他の変更を上書きするリスクがあるため、--force-with-lease の使用を推奨する。

取り消し操作

ファイル単位の取り消し

git restore <ファイ>          # ワーキングツリーの変更を取り消し(Git 2.23+)
git restore --staged <ファイ> # ステージを取り消し(Git 2.23+)
git checkout -- <ファイ>      # ワーキングツリーの変更を取り消し(旧来)
git reset HEAD <ファイ>       # ステージを取り消し(旧来)

コミット単位の取り消し

git revert <コミットID>         # 指定コミットを打ち消す新コミットを作成
git revert HEAD                 # 直前のコミットを打ち消す

git reset --soft HEAD~1         # 直前のコミットを取り消し(変更はステージに残る)
git reset --mixed HEAD~1        # 直前のコミットを取り消し(変更はワーキングツリーに残る)
git reset --hard HEAD~1         # 直前のコミットを取り消し(変更も破棄)
コマンドコミットステージワーキングツリー
reset --soft取り消し保持保持
reset --mixed取り消し取り消し保持
reset --hard取り消し取り消し取り消し

reset --hard は変更が完全に失われるため注意。共有リポジトリでの使用は避ける。

Stash(一時退避)

git stash                       # 変更を一時退避
git stash push -m "メッセージ"  # メッセージ付きで退避
git stash list                  # 退避一覧
git stash pop                   # 最新の退避を戻してスタックから削除
git stash apply stash@{0}       # 指定の退避を戻す(スタックは残る)
git stash drop stash@{0}        # 指定の退避を削除
git stash clear                 # 全ての退避を削除
git stash branch <ブランチ>   # 退避からブランチを作成

-u--include-untracked)を付けると未追跡ファイルも退避できる。

タグ

git tag                          # タグ一覧
git tag <タグ>                 # 軽量タグを作成
git tag -a <タグ> -m "説明"   # 注釈付きタグを作成
git tag -a <タグ> <コミットID> # 特定コミットにタグを作成
git show <タグ>                # タグの詳細
git push origin <タグ>         # タグをプッシュ
git push origin --tags           # 全タグをプッシュ
git tag -d <タグ>              # ローカルタグを削除
git push origin --delete <タグ> # リモートタグを削除

検索

git grep "検索文字列"            # 追跡ファイル内を全文検索
git grep -n "検索文字列"         # 行番号付き
git log --all --grep="キーワード" # コミットメッセージを検索
git log -S "キーワード"          # 追加・削除された文字列を検索
git bisect start                 # 二分探索でバグ導入コミットを特定

よく使う便利操作

特定ファイルの変更をなかったことにする

git checkout HEAD -- <ファイ>

別ブランチの特定コミットを取り込む

git cherry-pick <コミットID>

ファイルの追跡をやめる(.gitignoreに追記後)

git rm --cached <ファイ>

コミット履歴を保持したままファイルをリネーム

git mv <旧ファイル> <新ファイル>

直前のブランチに戻る

git switch -
git checkout -

作業ツリーをクリーンにする

git clean -fd    # 未追跡のファイルとディレクトリを削除
git clean -fdn   # 削除対象のドライラン(実際には削除しない)

.gitignore の書き方

# コメント
node_modules/      # ディレクトリ
*.log              # 拡張子
.env               # 特定ファイル
!important.log     # 例外(除外しない)
/dist              # ルート直下のみ
**/cache/          # 全階層の cache/ ディレクトリ

.gitignore に追加する前に既に追跡済みのファイルは git rm --cached で追跡を解除する必要がある。

参考リンク