目次
- はじめに
- 基本コマンド一覧
- 変更を確認する(差分の確認)
- 変更を記録する(保存の流れ)
- リモートと同期する(GitHubなどとの連携)
- 変更を取り消す
- 作業の場所を切り替える(ブランチ)
- ブランチを使いこなす
- オプションを効率的に覚えるコツ
- まとめ
はじめに
プログラミング学習を進めていくと、必ず耳にするのがGit(ギット)というツールです。チーム開発やポートフォリオ公開の際に必須となるため、早めに基本操作に慣れておくと今後の学習がスムーズになります。特に「間違えてコミットしてしまった」「もとに戻したい」という場面は初心者がつまずきやすいポイントのため、取り消し操作やブランチの使い方も含めて、Git初心者がまず覚えるべき内容について、備忘録としてまとめます。
基本コマンド一覧
| コマンド | 用途 | 主なオプション |
|---|---|---|
| git status | 変更ファイルの確認 | -s, -b |
| git diff | 差分の表示 | --staged, --name-only, --stat |
| git add | ステージングに追加 | -A, -u, -p, -n |
| git commit | 変更を記録 | -m, -a, --amend, -v |
| git log | コミット履歴の表示 | --oneline, --graph, --all, -n |
| git push | リモートへ送信 | -u, -f, --force-with-lease, --tags |
| git pull | リモートから取得 | --rebase, --ff-only, --all |
| git fetch | リモートの情報を取得のみ | --all, --prune, -v |
| git restore | 変更前の状態に戻す | --staged, --source |
| git reset | 過去の状態に戻す | --soft, --mixed, --hard |
| git revert | 特定コミットを打ち消す | -n, --no-edit |
| git branch | ブランチ一覧・操作 | -a, -r, -d, -D, -m |
| git switch | ブランチ切り替え | -c, -C, -d, --discard-changes |
| git checkout | ブランチ切替・ファイル復元(旧) | -b |
| git stash | 変更の一時退避 | pop, list, drop, -u |
| git merge | ブランチを統合する | --no-ff, --squash, --abort |
変更を確認する(差分の確認)
コードを書き換えた後、「どのファイルを変更したか」「どの行を書き換えたか」を確認することは、ミスを防ぐ上でとても大切です。
【git status】
現在の作業状態を一覧で表示します。どのファイルが変更されているか、ステージング(次に説明するaddの状態)されているかを確認できます。
git status
主なオプションは以下の通りです。
-
-sまたは--short: 短い形式で表示します -
-bまたは--branch: ブランチ情報も表示します
【git diff】
ファイル内の具体的な変更箇所を、行単位で表示します。「どの行を削除して、どの行を追加したか」が色分けされて表示されるため、変更内容を細かくチェックできます。
git diff
主なオプションは以下の通りです。
-
--stagedまたは--cached: ステージングされた変更を表示します -
--name-only: 変更されたファイル名のみを表示します -
--stat: 変更の統計情報を表示します -
--color-words: 単語単位で差分を表示します
【git diff --staged】
git addでステージングした後の差分を確認できます。コミット前の最終チェックに便利です。
git diff --staged
変更を記録する(保存の流れ)
Gitでは、ファイルの変更を保存する際に「準備(ステージング)」と「記録(コミット)」の2段階を踏みます。この仕組みにより、複数のファイルを編集した場合でも、関連する変更だけをまとめて記録できます。
【git add】
変更したファイルをステージング(コミット準備状態)にします。ステージングとは、次のコミットに含める変更を選ぶ作業のことです。
git add ファイル名
全ての変更ファイルをまとめてステージングする場合は、以下のコマンドが便利です。
git add .
主なオプションは以下の通りです。
-
-Aまたは--all: 全ての変更(追加・変更・削除)をステージングします -
-uまたは--update: 既存ファイルの変更と削除のみをステージングします(新規ファイルは除外) -
-pまたは--patch: 変更を対話的に選択してステージングできます -
-nまたは--dry-run: 実際には追加せず、どのファイルが追加されるかを確認します
【git commit】
ステージングした変更をローカルリポジトリ(自分のPC内の記録場所)に保存します。-mオプションの後にメッセージを書くことで、どんな変更をしたかを記録できます。
git commit -m "ログイン機能を追加"
主なオプションは以下の通りです。
-
-m: コミットメッセージを指定します -
-aまたは--all: 変更されたファイルを自動的にステージングしてコミットします(新規ファイルは除外) -
--amend: 直前のコミットを修正します(詳しくは後述の取り消しセクションで解説します) -
-vまたは--verbose: コミット時に差分も表示します -
--no-edit:--amendと併用し、メッセージを変更せずにコミットを修正します
【git log】
これまでのコミット履歴を一覧表示します。誰が、いつ、どんな変更をしたかが分かります。後述する取り消し操作では、このコマンドで確認したコミットの識別子(ハッシュ値と呼ばれる文字列)を使う場面が多いため、合わせて覚えておくと安心です。
git log
主なオプションは以下の通りです。
-
--oneline: 1行で簡潔に表示します -
--graph: ブランチの分岐をグラフで表示します -
--all: 全てのブランチの履歴を表示します -
-n <数字>: 指定した数だけ最新のコミットを表示します(例:-n 5で最新5件) -
--author=<名前>: 特定の作者のコミットのみを表示します -
--since=<日付>: 指定した日付以降のコミットを表示します(例:--since="2 weeks ago") -
--stat: 各コミットで変更されたファイルの統計情報を表示します
リモートと同期する(GitHubなどとの連携)
GitHubやGitLabなどのリモートリポジトリ(サーバー上の保管場所)と、自分のPC(ローカルリポジトリ)の間でデータをやり取りする際に使うコマンドです。
【git push】
ローカルで記録した変更を、リモートリポジトリに送信して反映させます。チーム開発では、自分の作業を他のメンバーと共有する際に使います。
git push
初めてpushする場合は、リモートのブランチ名を指定する必要があります。
git push origin main
主なオプションは以下の通りです。
-
-uまたは--set-upstream: 上流ブランチを設定します(次回からgit pushだけで送信可能になります) -
-fまたは--force: 強制的にpushします(リモートの履歴を上書き) -
--force-with-lease: より安全な強制push(他の人の変更がある場合は失敗します) -
--all: 全てのブランチをpushします -
--tags: タグをpushします -
-nまたは--dry-run: 実際には送信せず、何が送信されるかを確認します
【git pull】
リモートリポジトリの最新の変更を、自分の手元に取り込みます。他のメンバーが更新した内容を反映させたいときに使います。
git pull
主なオプションは以下の通りです。
-
--rebase: マージコミットを作らず、自分の変更を最新の変更の上に適用します -
--no-rebase: 通常のマージを実行します(デフォルト) -
--ff-only: 早送り(fast-forward)できる場合のみ更新します -
--all: 全てのリモートから取得します -
-vまたは--verbose: 詳細な情報を表示します
【git fetch】
リモートリポジトリの最新情報を取得しますが、自分の作業ファイルには反映させません。「どんな変更があるか確認してから取り込みたい」という場面に便利です。
git pullが「取得して即反映」なのに対し、git fetchは「取得だけして反映は後で」というイメージです。
git fetch
取得後に差分を確認したい場合は、以下のようにgit diffと組み合わせます。
git diff origin/main
主なオプションは以下の通りです。
-
--all: 全てのリモートから情報を取得します -
--prune: リモートで削除されたブランチの情報をローカルからも削除します -
-vまたは--verbose: 取得した情報の詳細を表示します
変更を取り消す
Gitを使っていると、「間違えてファイルを変更してしまった」「コミットの内容を間違えた」「思っていた状態と違う」といった困りごとに必ず遭遇します。ここでは、よくある困りごとを場面別に整理しながら、取り消しのためのコマンドを解説します。
【取り消しコマンドの全体像】
Gitの取り消し操作は、「どの段階の変更を」「どこまで戻すか」によって使うコマンドが変わります。まずは全体像を表で確認しましょう。
| 困りごと | 使うコマンド | 履歴への影響 |
|---|---|---|
| ファイルの変更を保存前に元に戻したい | git restore |
履歴に影響しない |
| ステージングだけ取り消したい | git restore --staged |
履歴に影響しない |
| 直前のコミットのメッセージや内容だけ直したい | git commit --amend |
直前のコミットが上書きされる |
| 複数世代前まで丸ごと戻したい(間のコミットも消す) | git reset |
コミット履歴が消える |
| 特定のコミットの変更だけ打ち消したい(間のコミットは残す) | git revert |
打ち消すコミットが追加される |
| すでにリモートにpushした変更を取り消したい |
git revert(基本) / git reset+強制push(注意が必要) |
チームの状況により異なる |
【git restore】保存前の変更を元に戻したい
ファイルを編集したものの、「やっぱり変更前の状態に戻したい」という場合に使います。まだgit addしていない変更を取り消す、もっとも基本的な取り消し方法です。
git restore ファイル名
git addした後の状態(ステージング)だけを取り消したい場合は、--stagedオプションを使います。ファイルの中身は変更されたまま、ステージングの状態だけが元に戻ります。
git restore --staged ファイル名
--source=<コミット>オプションを使うと、指定したコミット時点の状態にファイルを戻せます。
例えば3つ前のコミット時点に戻したい場合はHEAD~3、特定のコミットに戻したい場合はハッシュ値を指定します。
同等の操作をgit checkoutでも書けます。詳しくは後述の【git checkout】セクションを参照してください。
git restore --source=HEAD~3 ファイル名
主なオプションは以下の通りです。
-
--staged: ステージングを取り消します(ファイルの中身は変更されたまま残ります) -
--source=<コミット>: 指定したコミット時点の状態に戻します
【git commit --amend】直前のコミットだけ直したい
「コミットメッセージを間違えた」「ファイルを1つ追加し忘れた」など、直前のコミットだけをやり直したい場合に使います。
git commit --amend -m "正しいメッセージ"
ファイルを追加し忘れていた場合は、先にgit addしてから--amendを実行します。
git add 追加し忘れたファイル
git commit --amend --no-edit
--no-editを付けると、メッセージを変更せずに内容だけを修正できます。
【git reset】複数世代前まで丸ごと戻したい
「3世代前の状態まで、間のコミットも含めてすべて取り消したい」という場合に使うコマンドです。指定したコミットより後の履歴がなかったことになるイメージです。
まず、git log --onelineで戻りたいコミットの位置を確認します。
git log --oneline
戻りたいコミットのハッシュ値(コミットを識別する文字列)が確認できたら、git resetを実行します。HEAD~の後ろの数字が「何世代前まで戻るか」を表しており、1つ前ならHEAD~1、3つ前ならHEAD~3、5つ前ならHEAD~5のように指定します。
git reset --mixed HEAD~3
--soft、--mixed、--hardの3種類のオプションがあり、戻し方の強さが異なります。
| オプション | ファイルの変更内容 | ステージング | 用途 |
|---|---|---|---|
--soft |
残る | 残る | コミットだけをやり直したい場合 |
--mixed(デフォルト) |
残る | 取り消される | コミットとステージングをやり直したい場合 |
--hard |
消える | 取り消される | 変更内容ごと完全に取り消したい場合 |
【git revert】特定のコミットだけ打ち消したい
「3世代前のコミットの内容だけを打ち消したいが、間の2つのコミットはそのまま残しておきたい」という場合に使います。git resetと違い、過去の履歴を削除するのではなく、「打ち消すための新しいコミット」を追加する仕組みです。
git revert <打ち消したいコミットのハッシュ値>
実行すると、エディタが開いてコミットメッセージの確認を求められます。そのままコミットして問題ない場合は、--no-editオプションで確認をスキップできます。
git revert --no-edit <コミットのハッシュ値>
【リモートにプッシュした変更を取り消す】
すでにgit pushした変更を取り消したい場合は、ローカルだけの取り消しと違って注意が必要です。他のメンバーが既にその変更を取り込んでいる可能性があるためです。
チームで共有しているブランチの場合
git revertで打ち消しのコミットを作り、それを通常通りpushする方法がおすすめです。履歴が消えないため、他のメンバーの作業に影響を与えにくい方法です。
git revert <取り消したいコミットのハッシュ値>
git push
自分だけが使っているブランチの場合
自分専用の作業ブランチで、まだ他の人がpullしていないことが確実な場合に限り、git resetで履歴を書き換えてから、強制的にpushし直す方法もあります。
git reset --hard <戻したいコミットのハッシュ値>
git push --force-with-lease
--force-with-leaseは、-f(--force)よりも安全な強制pushです。自分が最後に取得した状態から、リモート側に新しい変更が加わっていた場合はpushが失敗するため、他の人の変更を誤って消してしまう事故を防げます。
作業の場所を切り替える(ブランチ)
ブランチ(branch)とは、作業の枝分かれのことです。新機能の開発や修正作業を、本番のコードに影響を与えずに進められます。
【git branch】
現在存在するブランチの一覧を表示します。今どのブランチで作業しているかも確認できます。
git branch
主なオプションは以下の通りです。
-
-aまたは--all: リモートブランチも含めて全て表示します -
-rまたは--remotes: リモートブランチのみを表示します -
-d: 指定したブランチを削除します(マージ済みの場合のみ) -
-D: 指定したブランチを強制削除します -
-m: ブランチ名を変更します -
-vまたは--verbose: 各ブランチの最新コミット情報も表示します
【git switch】
作業するブランチを切り替えます。新しいブランチを作成する場合は、-cオプションを付けます。
git switch ブランチ名
新しいブランチを作成して切り替える場合は以下のようにします。
git switch -c 新しいブランチ名
主なオプションは以下の通りです。
-
-cまたは--create: 新しいブランチを作成して切り替えます -
-Cまたは--force-create: ブランチが既に存在する場合は上書きして作成します -
-dまたは--detach: 特定のコミットに直接切り替えます(detached HEAD状態になります) -
--discard-changes: 未保存の変更を破棄して切り替えます
【git checkout】
git checkoutは、git switchが登場する以前から長年使われてきたコマンドです。ブランチの切り替え・ファイルの復元・特定コミットへの移動を1つのコマンドで担っていましたが、「多機能すぎて混乱しやすい」という声を受け、2019年リリースのGit 2.23でgit switchとgit restoreに役割が分割されました。
現在も廃止予定はなく、現場でも普通に使われています。ネット上の記事や書籍はgit checkoutで書かれているものが多いため、git switch / git restoreとの対応を把握しておくと情報収集がスムーズです。
| 操作内容 | git checkout(旧) | git switch / restore(新) |
|---|---|---|
| ブランチを切り替える | git checkout ブランチ名 |
git switch ブランチ名 |
| ブランチを作成して切り替える | git checkout -b 新ブランチ |
git switch -c 新ブランチ |
| ファイルの変更を元に戻す | git checkout ファイル名 |
git restore ファイル名 |
| 特定のコミットに移動する | git checkout コミットハッシュ |
git switch --detach コミットハッシュ |
現場では git checkout の記事を読む機会が多い
新しいgit switch / git restoreとの対応を把握しておくと、情報収集がスムーズになります。ファイルの復元操作については前述の【git restore】保存前の変更を元に戻したいセクションも参照してください。
ブランチを使いこなす
ブランチの基本操作に慣れてきたら、次は「どんな場面でブランチを使うと便利か」を知ることで、Gitをより安全に活用できるようになります。
【ブランチを使うメリット】
ブランチを分けて作業すると、以下のようなメリットがあります。
- 本番のコード(mainブランチなど)に影響を与えずに、新機能の開発や修正を試せる
- 複数の作業を同時に進めても、互いに干渉しない
- 作業内容ごとに履歴が分かれるため、後から見返しやすい
- 試した結果が失敗しても、ブランチごと削除すればやり直せる
【どんな時にブランチを切るのが良いか】
初心者のうちは、以下のようなタイミングでブランチを作成するのがおすすめです。
- 新しい機能を追加するとき(例:
feature/loginのような名前) - バグを修正するとき(例:
fix/header-bugのような名前) - 試しに何かを実験してみたいとき
-
git resetなど、履歴を書き換える操作を試す前
【git stash】作業中の変更を一時的に退避する
ブランチを切り替えようとしたとき、「変更が残っているため切り替えられません」というメッセージが出て困った経験のある方も多いと思います。git stash(スタッシュ、隠す場所という意味)は、コミットするほどではない作業中の変更を一時的に退避させるコマンドです。
git stash
退避させた変更は、後から元に戻せます。
git stash pop
主なオプションやサブコマンドは以下の通りです。
-
git stash list: 退避させた変更の一覧を表示します -
git stash pop: 直近に退避した変更を取り出して適用します(一覧からは削除されます) -
git stash apply: 変更を適用しますが、一覧には残したままにします -
git stash drop: 不要になった退避内容を削除します -
-uまたは--include-untracked: 新規作成したファイルも含めて退避します
困りごと別の使い方
① 作業中に別のブランチへ急ぎ切り替えたい
作業中のブランチで変更が残ったまま、急いで別のブランチに切り替えたいときは、以下の流れがおすすめです。
git stash
git switch 別のブランチ名
# 別ブランチでの作業が終わったら元のブランチに戻る
git switch もとのブランチ名
git stash pop
② mainブランチで作業してしまったので、本来のブランチに変更を移したい
ブランチを切り替えるのを忘れてmainで作業してしまった場合は、git stashで変更を退避してから正しいブランチに切り替えて適用できます。
# mainで作業してしまった変更を退避
git stash
# 本来作業すべきブランチに切り替える
git switch 本来のブランチ名
# 退避した変更を適用する
git stash pop
💡 補足: 未コミットの変更は
git stashを使わずにgit switchで切り替えるだけで、変更内容がそのまま引き継がれる場合があります。
切り替え先ブランチと競合しない変更であれば、そのまま切り替えるだけでOKです。
競合がある場合はGitがエラーを出して切り替えを拒否するため、その際にgit stashを使ってください。
③ 複数の退避内容を使い分けたい
git stashを複数回実行すると、退避内容が積み重なっていきます。git stash listで一覧を確認し、特定の退避内容だけを取り出せます。
git stash list
# 例: stash@{0}が最新、stash@{1}がその前
git stash apply stash@{1}
④ 退避した内容が不要になった
試した結果、退避した変更が不要になった場合はgit stash dropで削除できます。全て不要な場合はgit stash clearでまとめて削除できます。
# 特定の退避内容を削除
git stash drop stash@{0}
# 全ての退避内容を削除
git stash clear
【取り消し作業を安全に試す】
git reset --hardのような、履歴やファイルの変更内容を消してしまうコマンドを試す前には、念のため別のブランチを切ってから試すと安心です。
git switch -c 試し用のブランチ
git reset --hard HEAD~3
試した結果が想定と違った場合は、もとのブランチに戻ってやり直せます。
git switch もとのブランチ名
git branch -D 試し用のブランチ
このように、ブランチを「取り消し操作のお試し用」として使う方法を知っておくと、操作を誤ってしまった場合の不安が減ります。
【git merge】
git merge(マージ)は、別のブランチで行った変更を、現在のブランチに取り込むコマンドです。新機能の開発や修正をブランチで行った後、mainブランチに反映させる際によく使います。
まず、取り込み先のブランチ(例: main)に切り替えてから実行します。
git switch main
git merge 取り込みたいブランチ名
主なオプションは以下の通りです。
-
--no-ff: マージコミットを必ず作成します(履歴にマージの記録が残ります) -
--squash: 取り込むブランチの複数のコミットを1つにまとめてマージします -
--abort: マージを中止して、マージ前の状態に戻します
【コンフリクトが起きたら】
コンフリクト(conflict、競合)とは、2つのブランチで同じファイルの同じ箇所を別々に変更した場合に発生する「どちらの変更を採用するか決められない」状態のことです。マージ時にコンフリクトが発生すると、以下のようなメッセージが表示されます。
CONFLICT (content): Merge conflict in ファイル名
Automatic merge failed; fix conflicts and then commit the result.
焦らず、以下の手順で解消できます。
① コンフリクトが発生しているファイルを確認する
git status
both modifiedと表示されているファイルがコンフリクトの対象です。
② ファイルを開いて内容を確認する
コンフリクトが発生したファイルを開くと、以下のような記号で区切られた箇所が見つかります。
<<<<<<< HEAD
現在のブランチの変更内容
=======
取り込もうとしたブランチの変更内容
>>>>>>> 取り込みたいブランチ名
<<<<<<<から=======までが現在のブランチの変更、=======から>>>>>>>までが取り込もうとしたブランチの変更です。
③ 残したい内容に書き直す
<<<<<<<、=======、>>>>>>>の記号ごと削除し、最終的に残したい内容だけにします。両方の変更を組み合わせても構いません。
④ ファイルをステージングしてコミットする
git add ファイル名
git commit -m "コンフリクトを解消"
オプションを効率的に覚えるコツ
Gitコマンドのオプションも、Linuxコマンドと同じように元の英単語を理解すると格段に覚えやすくなります。
【元の英単語から理解する】
主要なオプションの元となる英単語をまとめました。
| オプション | 元の英単語 | 意味 | よく使うコマンド |
|---|---|---|---|
| -m | Message | メッセージ | git commit -m |
| -a | All | すべて | git commit -a, git add -A |
| -u | Update / Upstream | 更新 / 上流 | git add -u, git push -u |
| -p | Patch / Parents | パッチ / 親 | git add -p |
| -f | Force | 強制的に | git push -f |
| -v | Verbose | 詳細表示 | git commit -v, git branch -v |
| -d | Delete | 削除(マージ済みのみ) | git branch -d |
| -D | Delete (force) | 強制削除(マージ未確認) | git branch -D |
| -b | Branch | ブランチ | git status -b |
| -c | Create | 作成 | git switch -c |
| -n | Number / Dry-run | 数 / リハーサル | git log -n, git push -n |
| -r | Remote / Recursive | リモート / 再帰的 | git branch -r |
| -s | Short | 短く | git status -s |
【セットで覚える実践的な組み合わせ】
個別のオプションよりも、よく使う組み合わせをセットで覚えると実践的です。
git commit -am
「すべて(a)をメッセージ付き(m)でコミット」する組み合わせです。変更されたファイルを自動的にステージングしてコミットできます。
# 変更ファイルを自動でaddしてコミット
git commit -am "バグ修正"
git log --oneline --graph
「1行(oneline)でグラフ(graph)表示」する組み合わせです。ブランチの分岐状況を視覚的に把握できます。
# コミット履歴をグラフで見やすく表示
git log --oneline --graph --all
git push -u origin main
「上流ブランチを設定(u)してpush」する組み合わせです。初回のpush時に使います。
# 初回push時に上流ブランチを設定
git push -u origin main
次回以降はgit pushだけで同じブランチにpushできるようになります。
git push --force-with-lease
「安全(lease)を確認しながら強制(force)push」する組み合わせです。取り消し操作でリモートの履歴を書き換えた後のpushに使います。
# リモートに新しい変更がなければpushを実行
git push --force-with-lease
【忘れた時の調べ方】
すべてのオプションを暗記する必要はありません。忘れた時にすぐ調べられる方法を知っておくことが重要です。
git --help
各コマンドの詳しい使い方を確認できます。
# commitコマンドのヘルプを表示
git commit --help
ブラウザで詳細なドキュメントが開きます。
git <コマンド> -h
簡易的なヘルプを表示します。オプション一覧を素早く確認したい時に便利です。
# commitコマンドのオプション一覧
git commit -h
Web検索も有効
分からないオプションは、検索エンジンで「git コマンド名 オプション 使い方」などと検索すると、日本語の解説記事が見つかります。公式ドキュメントも参考になります。
まとめ
Gitの基本は「修正 → add → commit」のサイクルに慣れることと、困ったときに「restore・reset・revert」のどれを使えばよいか判断できることです。最初は難しく感じるかもしれませんが、ブランチやstashを使って安全に試しながら使っていくうちに、自然と身についていきます。