Gitコマンド早見表:開発効率を劇的に上げる必須コマンド50選
現代のソフトウェア開発において、Gitは単なるバージョン管理ツールではなく、チーム開発の基盤となる不可欠なインフラです。しかし、Gitのコマンドは膨大であり、すべてのコマンドを完璧に暗記しているエンジニアは稀です。
「コンフリクトが起きてしまった」「間違えてコミットしてしまった」「過去の特定の状態に戻したい」といった場面で、適切なコマンドを即座に引き出せることは、開発スピードとコードの安全性に直デに影響します。
本記事では、エンジニアが日常的に使用するGitコマンドを50個厳選し、役割ごとに体系化して解説します。この「Gitコマンド早見表」を、日々の開発の辞書として活用してください。
1. リポジトリの初期化と基本設定
Gitを使用する第一歩は、プロジェクトの準備と、誰が変更を行ったかを記録するためのユーザー設定です。
リポジトリの作成と初期設定
プロジェクトを開始する際や、既存のディレクトリをGit管理下に置くためのコマンドです。
git init: カレントディレクトリに新しいGitリポジトリを作成します。git config --global user.name "Your Name": 全リポジトリで使用するユーザー名を設定します。git config --global user.email "your@email.com": 全リポジトリで使用するメールアドレスを設定します。git config --list: 現在の設定一覧を表示します。git config --global core.editor vim: デフォルトのエディタを指定します。
状態の確認と基本フロー
現在の作業ディレクトリがどのような状態にあるかを確認するための、最も頻繁に使うコマンド群です。
git status: ステージングエリアおよびワークツリーの現在の状態を表示します。git add <file>: 特定のファイルをステージングエリアに追加します。git add .: すべての変更をステージングエリアに追加します。git commit -m "message": ステージングされた変更をコミットします。git commit --amend: 直前のコミットメッセージを修正、または追加の変更を直前のコミットに含めます。git diff: ワークツリーとステージングエリアの差分を表示します。git diff --staged: ステージングエリアと最新のコミットの差分を表示します。
2. ブランチ操作とマージの戦略
Gitの真価は、ブランチ(枝分かれ)を用いた並行開発にあります。ブランチを自在に操ることは、機能開発とバグ修正を分離するために不可欠です。
ブランチの作成・切り替え・削除
ブランチのライフサイクルを管理するためのコマンドです。
git branch: ローカルブランチの一覧を表示します。 ホストリポジトリとの連携に詳しい方は、Gitコマンドの詳細な一覧はこちらも併せて参照してください。git branch <branch-name>: 新しいブランチを作成します。git checkout <branch-name>: 指定したブランチに切り替えます。git switch <branch-name>: (モダンな方法)ブランチを切り替えます。git switch -c <branch-name>: ブランチを作成して同時に切り替えます。git checkout -b <branch-name>: (従来の方法)ブランチを作成して同時に切り替え、。git branch -d <branch-name>: マージ済みのブランチを削除します。git branch -D <branch-name>: 未マージのブランチを強制的に削除します。
マージとコンフリクト解決
複数のブランチの変更を統合するプロセスです。
git merge <branch-name>: 指定したブランチの変更を現在のブランチに統合します。git merge --no-ff <branch-name>: ファストフォワードを防ぎ、マージコミットを強制的に作成します。git rebase <branch-name>: 指定したブランチの変更を現在のブランチの先端に再配置します。git merge --abort: マージ中のコンフリクト発生時に、マージ作業を中止して元の状態に戻します。
比較:Merge vs Rebase
開発現場でよく議論になる「Merge」と「Rebase」の違いを整理しました。
| 特徴 | git merge | git rebase |
|---|---|---|
| 履歴の形状 | 枝分かれと合流の履歴がすべて残る | 一本の直線的な履歴になる |
| 複雑性 | 構造が分かりやすいが、履歴が複雑化しやすい | 履歴が綺麗だが、コンフリクト解消が大変な場合がある |
| 安全性 | 既存の履歴を書き換えないため安全 | 既存の履歴を書き換えるため、共有ブランチでは注意が必要 |
| 主な用途 | 機能開発の完了報告、リリース時 | 開発中の最新状態への同期、履歴の整理 |
3. リモートリポジトリとの連携
GitHubやGitLabなどのリモートリポジトリと同期するためのコマンドです。チーム開発において、情報の最新化は最も重要なタスクの一つです。
クローンとリモートの設定
git clone <url>: リモートリポジトリをローカルに複製します。git remote add origin <url>: リモートリポジトリをoriginという名前で登録します。git remote -v: 設定されているリモートリポジトリの一覧とURLを表示します。git remote remove <name>: 登録されているリモートリポジトリを削除します。
同期とプッシュ
git push origin <branch-name>: ローカルブランチの変更をリモートに反映します。git push -u origin <branch-name>: 初回プッシュ時に、ローカルとリモートのブランチを紐付けます。git pull: リモートの最新情報を取得し、現在のブランチにマージします。git fetch: リモートの最新情報を取得しますが、ローカルのワークツリーにはマージしません。git fetch --all: すべてのリモックリポジトリから情報を取得します。git pull --rebase:fetch+rebaseを行い、履歴を直線的に保ちながら更新します。
4. 履歴の追跡とトラブルシューティング
「間違えた」とき、Gitは強力なバックアップ機能を提供します。過去のログを辿り、必要に応じて変更を取り消すためのコマンドです。
ログの確認と差分調査
git log: コミット履歴を時系列で表示します。git log --oneline: 各コミットを一行で簡潔に表示します。git log --graph --all: ブランチの分岐と合流をグラフ形式で表示します。git log -p: 各コミットにおける具体的な差分(diff)を表示します。git log --author="Name": 特定の作成者によるコミットのみを表示します。git show <commit-hash>: 特定のコミットの内容を詳細に表示します。git blame <file>: ファイルの各行を誰がいつ変更したかを表示します(犯人探しではなく、文脈理解に重要です)。
変更の取り消しと修正
git reset --soft <commit-hash>: コミット履歴だけを戻し、変更内容はステージングエリアに残します。git reset --mixed <commit-hash>: コミットとステージングを戻し、変更内容はワークツリーに残します(デフォルト)。git reset --hard <commit-hash>: 指定したコミットの状態に、ワークツリーを含めて完全に強制的に戻します(注意が必要)。git revert <commit-hash>: 指定したコミットの変更を打ち消す「新しいコミット」を作成します(公開済み履歴の修正に安全)。git checkout <file>: 特定のファイルの変更を、最新のコミットの状態に戻します。git cherry-pick <commit-hash>: 他のブランチにある特定のコミットだけを、現在のブッチに適用します。
作業の一時保存(Stash)
ブランチを切り替えたいが、現在の作業をコミットしたくない場合に非常に便利です。
* git stash: 現在の未コミットの変更を一時的に退避させます。
* git stash list: 退避させたスタッシュの一覧を表示します。
* git stash pop: 最も新しいスタッシュを適用し、リストから削除します。
* git stash apply: スタッシュを適用しますが、リストには残します。
* git stash drop: 特定のスタッシュを削除します。
* git stash clear: すべてのスタッシュを削除します。
5. 応用テクニックと管理の最適化
Gitを使いこなすエンジニアは、リポジトリのクリーンさを保つための管理術を持っています。
ファイル管理と除外設定
プロジェクトには、ログファイルや依存ライブラリ、環境変数などの「管理すべきでないファイル」が含まれます。これらを適切に除外するために、不要なファイルを管理から外す方法(.gitignore)をマスターしておきましょう。
git rm <file>: ファイルをワークツリーとGitの管理から削除します。git rm --cached <file>: ファイルをGitの管理から外しますが、ローカルのファイル自体は残します。git mv <old> <new>: ファイルの名前を変更、または移動し、その変更をGitに記録します。
高度な操作
git reflog:git reset --hardなどで失われたように見えるコミットの履歴を辿るための「操作ログ」を表示します。Gitの救済策として最強のコマンドです。git bisect: 二分探索を用いて、どのコミットからバグが混入したかを特定します。git clean -fd: Git管理外の追跡されていないファイルやディレクトリを強制的に削除します。
FAQ:Gitに関するよくある質問
Q1: git reset --hard を使った後に、間違えて消したコミットを戻せますか?
A1: はい、git reflog を使用してください。Gitは操作の履歴を記録しているため、reflog から対象のコミットハッシュを見つけ、再度 git reset を行うことで復元できる可能性が高いです。
Q2: git pull でコンフリクトが発生しました。どうすればいいですか?
A2: まず、コンフリクトが発生しているファイルを確認します。エディタで <<<<<<< や >>>>>>> のマーカーを探し、正しいコードに修正してください。修正後、git add を行い、git commit をすることで解消されます。
Q3: .gitignore に追加したのに、ファイルがGitの管理から外れません。
A3: そのファイルがすでにGitのインデックス(ステージングエリア)に含まれていることが原因です。git rm --cached <file> を実行して、一度インデックスから削除してから再度コミットしてください。
Q4: git merge と git rebase どちらを使うべきですか?
A4: チームの運用ルールに従うのがベストです。一般的には、共有ブランチ(mainやdevelop)への統合には履歴が正確に残る merge を使い、個人の作業ブランチを最新にする際には履歴が綺麗になる rebase を使うのが推奨されます。
Q5: git stash で保存した内容が、どのブランチからでも使えますか?
A5: はい、スタッシュはブランチに依存せず、リポジトリ全体で共有されるスタッシュスタックに保存されます。どのブランチにいても git stash pop で取り出すことが可能です。
Q6: コミットメッセージを間違えました。修正方法は?
A6: 直前のコミットであれば、git commit --amend を使うのが最も簡単です。エディタが開き、メッセージを書き直して保存するだけで修正されます。
まとめ
Gitのコマンドは、大きく分けて「基本操作」「ブランチ管理」「リモート連携」「履歴の追跡」「応用」の5つのカテゴリに分類できます。
これら50のコマンドをすべて一度に覚える必要はありません。まずは status, add, commit, push, pull, branch といった、毎日必ず触れるコマンドを無意識に使えるレベルまで習得しましょう。そして、トラブルが発生した際に log, reset, reflog, stash といった強力なコマンドを「辞書」として引き直す習慣をつけることが、シニアエンジニアへの近道です。
この早見表をブックマークし、開発の現場で活用してください。