Wakaran

分からんことが多すぎるので備忘録 どこかのだれかの役に立ったらいいですね

記事検索

← 一覧に戻る

2026/4/24git

gitコマンドの覚書


gitコマンドが覚えられない

なんとなく覚えてるけど自信なくて調べたりしているので、めんどいから備忘録を作っておきます。
一応コマンド調べたらいっぱい出てきたので一通り置いておきます。
間違ってたらごめんなさい。

Git コマンド覚書

clone — リポジトリを取得

# 基本
git clone https://github.com/user/repo.git

# ディレクトリ名を指定
git clone https://github.com/user/repo.git my-project

# ブランチを指定してクローン
git clone -b main https://github.com/user/repo.git

status — 状態確認

# 変更状態を確認
git status

# 短縮表示(M=変更, A=追加, ?=未追跡)
git status -s

add — ステージングに追加

# ファイルを指定
git add src/index.ts

# 全ファイルを追加
git add .

# 変更箇所をハンクごとに選んで追加(対話モード)
git add -p

commit — コミット

# メッセージを指定してコミット
git commit -m "feat: ログイン機能を追加"

# add + commit を一括(新規ファイルは対象外)
git commit -am "fix: バリデーションのバグを修正"

# 直前のコミットメッセージを修正
git commit --amend -m "fix: 正しいメッセージ"

# 直前のコミットに変更を追加(メッセージはそのまま)
git add src/foo.ts
git commit --amend --no-edit

push — リモートへ送信

# 現在のブランチをプッシュ
git push

# ブランチを指定してプッシュ
git push origin feature/login

# 初回プッシュ(上流ブランチを設定)
git push -u origin feature/login

# タグをプッシュ
git push origin v1.0.0

# すべてのタグをプッシュ
git push --tags

pull — リモートから取得してマージ

# fetch + merge(デフォルト)
git pull

# fetch + rebase(履歴を一直線に保つ)
git pull --rebase

# 明示的に merge を使う(pull.rebase=true の設定を上書き)
git pull --no-rebase

# ブランチを指定して取得
git pull origin main

rebase vs merge の使い分け どちらが正しいではなく、プロジェクト次第かと。特に決まってないことのほうが多い気がする。

状況向いている方法
PR出す前・コミット少ないrebase でもOK(履歴がきれい)
作業が長引いてコミットが多いmerge 一択(rebase はコンフリクトを1コミットずつ解消する羽目になる)
既にリモートに push 済みrebase はNG、merge 一択
複数人が同じブランチに push するrebase はNG(他人のコミットがズレる)

--no-rebase が役立つ場面 git config --global pull.rebase true を設定している環境では git pull が常に rebase になる。 上の表に照らして merge のほうが適切なときに --no-rebase で上書きできる。

自分のデフォルト設定を確認:

git config pull.rebase
# true → rebase がデフォルト / 空または false → merge がデフォルト

fetch — リモートの情報だけ取得(マージしない)

# リモートの最新情報を取得(マージはしない)
git fetch origin

# 削除済みリモートブランチを手元からも消す
git fetch --prune

# fetch 後にリモートの履歴を確認してから取り込む
git fetch origin
git log origin/main --oneline   # リモートの最新コミットを確認
git diff HEAD origin/main       # 自分との差分を確認
git merge origin/main           # 内容を確認してから取り込む

いつ使うか 普通の開発では git pull で事足りることがほとんど。 「取り込む前に差分を確認したい」ときや、リモートのブランチ一覧を最新にしたいときに使う。 git fetch --prune だけは、不要なリモートブランチを掃除するために定期的に使うことがある。


branch — ブランチ管理

# ローカルのブランチ一覧
git branch

# リモート含めた一覧
git branch -a

# ブランチを作成(切り替えはしない)
git branch feature/signup

# ブランチを削除(マージ済みのみ)
git branch -d feature/signup

# マージ未済みでも強制削除
git branch -D feature/signup

# ブランチ名を変更
git branch -m old-name new-name

checkout / switch — ブランチ切り替え

# ブランチを切り替え
git switch main
git checkout main          # 旧スタイル

# ブランチを作成して切り替え
git switch -c feature/login
git checkout -b feature/login  # 旧スタイル

# 特定コミット時点のファイルを復元
git checkout a1b2c3d -- src/index.ts

# ファイルの変更を破棄(最新コミットに戻す)
git restore src/index.ts
git checkout -- src/index.ts   # 旧スタイル

diff — 差分確認

# ステージ前の変更(ワーキングツリー vs 最新コミット)
git diff

# ステージ済みの変更(コミット前の確認)
git diff --staged

# ブランチ間の差分
git diff main..feature/login

# 特定ファイルの差分
git diff src/index.ts

# 変更されたファイル名だけ確認
git diff --name-only main..feature/login

log — 履歴確認

# コミット履歴
git log

# 1行で簡潔に表示
git log --oneline

# ブランチの分岐をグラフで表示
git log --oneline --graph --all

# 特定ファイルの変更履歴
git log --oneline -- src/index.ts

# 直近5件だけ表示
git log -n 5

# 変更内容も一緒に表示
git log -p

stash — 変更を一時退避

# 現在の変更を退避
git stash

# 名前をつけて退避
git stash push -m "ログイン画面の途中"

# 未追跡ファイルも含めて退避
git stash push -u -m "新規ファイルごと退避"

# staged だけ退避(unstaged はワーキングツリーに残る)※ Git 2.35+
git stash push --staged -m "ステージだけ退避"
# ※ --staged と -u は併用不可(矛盾するためエラーになる)

# staged はそのままで unstaged だけ退避
git stash push --keep-index -m "未ステージだけ退避"

# staged はそのままで unstaged + 未追跡ファイルも退避
git stash push --keep-index -u -m "未ステージ+未追跡を退避"

# 退避リストを確認
git stash list

# 最新の退避を取り出す(リストから削除)
git stash pop

# 特定の退避を取り出す
git stash pop stash@{2}

# 取り出すが退避リストには残す
git stash apply stash@{0}

# 特定の退避を削除
git stash drop stash@{0}

# すべての退避を削除
git stash clear

reset — コミット・ステージの取り消し

# ステージを取り消す(ファイルの変更は残る)
git reset HEAD src/index.ts

# 直前のコミットを取り消す(変更はステージに残る)
git reset --soft HEAD~1

# 直前のコミットを取り消す(変更はワーキングツリーに残る)
git reset --mixed HEAD~1

# 直前のコミットを完全に消す(変更も消える ⚠ 取り消し不可)
git reset --hard HEAD~1

# 特定コミットまで戻す(⚠ 共有ブランチでは使わない)
git reset --hard a1b2c3d

revert — コミットを打ち消す新コミットを作成

# 指定コミットを打ち消す(履歴は保持・共有ブランチでも安全)
git revert a1b2c3d

# 複数コミットを一括で打ち消す
git revert HEAD~3..HEAD

reset --hard はローカルのみ。origin/main など共有済みのコミットには revert を使う。


merge / rebase — ブランチを統合

# feature/login を現在のブランチへマージ
git merge feature/login

# マージコミットを必ず作る(プルリク的な記録を残したいとき)
git merge --no-ff feature/login

# ファストフォワードのみ許可(できなければエラー)
git merge --ff-only feature/login

# 現在のブランチのコミットを main の先端に付け替え
git rebase main

# コンフリクト解消後に rebase を続行
git rebase --continue

# rebase を中断して元の状態に戻す
git rebase --abort

# 直近3コミットをまとめる(対話的 rebase)
git rebase -i HEAD~3

# コンフリクトが起きたときの中断コマンド一覧
git merge --abort       # merge 中断
git rebase --abort      # rebase 中断
git cherry-pick --abort # cherry-pick 中断
git revert --abort      # revert 中断

# stash pop のコンフリクトは --abort がないので手動で対処
# → 展開された変更を捨てて元に戻す
git restore .           # コンフリクトしたファイルを破棄
git stash drop          # stash リストからも削除(pop が完了していないので残っている)

cherry-pick — 特定コミットだけ取り込む

# 指定コミットを現在のブランチに適用
git cherry-pick a1b2c3d

# 複数コミットをまとめて適用
git cherry-pick a1b2c3d e4f5g6h

tag — タグ管理

# タグ一覧
git tag

# 軽量タグを作成
git tag v1.0.0

# 注釈付きタグを作成
git tag -a v1.0.0 -m "リリース 1.0.0"

# 特定コミットにタグを付ける
git tag -a v1.0.0 a1b2c3d -m "リリース 1.0.0"

# タグを削除
git tag -d v1.0.0

# タグをリモートへプッシュ(事前にローカルでタグを作っておく必要がある)
git tag -a v1.0.0 -m "リリース 1.0.0"  # 1. ローカルでタグを作成
git push origin v1.0.0                  # 2. リモートへ送る

v1.0.0 はブランチと混同しない? Git 内部でタグは refs/tags/v1.0.0、ブランチは refs/heads/v1.0.0 と別管理されている。 git push origin v1.0.0 と書いたときはタグを優先して探すので、通常は問題ない。 同名のタグとブランチが両方存在する場合は警告が出るので、明示的に指定する:

git push origin refs/tags/v1.0.0   # タグとして push
git push origin refs/heads/main    # ブランチとして push

remote — リモート管理

# リモート一覧(URL付き)
git remote -v

# リモートを追加
git remote add origin https://github.com/user/repo.git

# リモートの URL を変更(SSH に切り替えるときなど)
git remote set-url origin git@github.com:user/repo.git

# リモートを削除
git remote remove origin

config — 設定

# ユーザー情報を設定(全リポジトリ共通)
git config --global user.name "Taro Yamada"
git config --global user.email "taro@example.com"

# このリポジトリだけに設定
git config user.email "work@example.com"

# デフォルトブランチを main に設定
git config --global init.defaultBranch main

# エディタを VS Code に設定
git config --global core.editor "code --wait"

# 設定を確認
git config --list

よく使うフロー

新機能を開発して PR を出す

git switch main
git pull origin main
git switch -c feature/login
# ... 実装 ...
git add .
git commit -m "feat: ログイン機能を追加"
git push -u origin feature/login
# → GitHub で PR を作成

作業途中でブランチを切り替えたい

git stash push -m "ログイン画面の途中"
git switch hotfix/crash
# ... 修正 ...
git switch feature/login
git stash pop

直前のコミットを修正したい

# メッセージだけ直す
git commit --amend -m "fix: 正しいメッセージ"

# ファイルも追加して修正
git add src/missed.ts
git commit --amend --no-edit

コミットしてしまったファイルをなかったことにしたい

git reset --soft HEAD~1        # コミットを取り消す(変更はステージに残る)
git restore --staged .env      # .env だけステージから外す
git commit -m "feat: .env を除いてコミット"

リモートの最新を取り込んでから作業を再開

git stash
git pull --rebase origin main
git stash pop

main の最新を feature ブランチに取り込む

git switch feature/login
git rebase main
# コンフリクトがあれば解消してから
git rebase --continue

あとがき

思ったよりボリュームが膨らんでしまった。
他にもいっぱいあると思うけどとりあえず区切ります。
そのうち追加するかも。reflogとか。

シェア