チートシート

Gitコマンド一覧: 毎日使う命令のチートシート

更新日: · Skillaria.Top

主要なGitコマンドは、リポジトリの作成に git init と git clone、変更の保存に git status、git add、git commit、ブランチの操作に git branch、git switch、git merge、サーバーとの同期に git push、git fetch、git pull、変更の取り消しに git restore、git reset、git revert です。

以下は、実際に使えるGitのチートシートです。コマンドは作業内容ごとに分類し、それぞれに例と短い説明を付けています。ターミナルの横に開いておくと便利です。1日にGitで行う作業のほとんどは、この表の20〜30個のコマンドで足ります。

コマンドの意味を理解するには、3つの領域を意識するとよいでしょう。作業ディレクトリ(ディスク上のファイル)、インデックスまたはステージングエリア(次のコミットに含まれる内容)、リポジトリ(.git フォルダ内のコミット履歴)です。多くのGitコマンドは、これら3つの領域の間、またはローカルとリモートの間で変更を移動させます。

Gitの設定

これらのコマンドは、インストール後に一度だけ実行します。--global フラグは設定を ~/.gitconfig に書き込み、そのユーザーのすべてのリポジトリに適用されます。省略すると、現在のリポジトリにのみ適用されます。

コマンド内容
git config --global user.name "Ivan Petrov"コミットの作成者名
git config --global user.email "ivan@example.com"コミットの作成者メールアドレス
git config --global init.defaultBranch main新しいリポジトリのデフォルトのブランチ名
git config --global core.editor "code --wait"コミットメッセージに使うエディタ(ここではVS Code)
git config --global pull.rebase falsegit pull のデフォルトの動作をマージにする
git config --global core.autocrlf inputコミット時にCRLFをLFに変換する(macOS/Linux。Windowsでは通常 true)
git config --list --show-originすべての設定と、その取得元ファイルを表示する
git config --global alias.st statusエイリアス: git status の代わりに git st と入力できる
git --versionインストールされているGitのバージョン
git help commitコマンドの完全なマニュアル(git commit -h は短い一覧)

リポジトリの作成とクローン

コマンド内容
git init現在のディレクトリに空のリポジトリ(.git フォルダ)を作成する
git init my-projectディレクトリ my-project を作成し、その中にリポジトリを作る
git clone https://github.com/user/repo.gitリモートのリポジトリを、履歴全体を含めてコピーする
git clone git@github.com:user/repo.git appSSHでクローンし、app フォルダに保存する
git clone --depth 1 URL浅いクローン: 最新のコミットのみを取得する。高速で容量も少ない
git clone -b develop URLクローンしてすぐにブランチ develop に切り替える

基本の流れ: status、add、commit

これが毎日の作業の中心です。変更内容を確認し、必要なものをインデックスに入れ、コミットとして記録します。

コマンド内容
git status状態を表示する: 変更されたファイル、ステージ済みのファイル、追跡されていないファイル
git status -s短い形式: M は変更あり、A は追加済み、?? は未追跡
git add file.txtファイルをインデックスに追加する
git add .現在のディレクトリ以下のすべての変更(削除を含む)を追加する
git add -Aリポジトリ全体のすべての変更を追加する
git add -p変更の部分(hunk)を対話的に選んで追加する
git commit -m "ログインフォームを追加"インデックスの内容からメッセージ付きのコミットを作成する
git commit -am "誤字を修正"追跡中の変更されたファイルをすべてステージしてコミットする。新しいファイルは含まれない
git commit --amend直前のコミットを書き直す: 入れ忘れたものを追加する、またはメッセージを修正する
git commit --amend --no-editメッセージを変えずに直前のコミットを補う
git rm file.txtディスクとインデックスの両方からファイルを削除する
git rm --cached secret.envディスク上には残したまま、追跡を解除する
git mv old.js new.jsファイルの名前を変更する、または移動する

典型的な作業の流れは次のとおりです。

git status
git add src/login.js src/login.css
git diff --staged          # コミットに含まれる内容を確認する
git commit -m "ログインフォームを追加"

すでに共有ブランチにプッシュされたコミットには --amend を使わないでください。ハッシュの異なる新しいコミットが作られ、チームメンバーの履歴と食い違いが生じます。

履歴と変更内容の確認

コマンド内容
git log現在のブランチのコミット履歴
git log --oneline各コミットを1行で表示する: 短縮ハッシュとタイトル
git log --oneline --graph --allすべてのブランチのグラフをターミナルに表示する
git log -p file.txtファイルの履歴を、各コミットの差分付きで表示する
git log --author="Ivan" --since="2 weeks ago"作成者と日付で絞り込む
git log -S "getUser"文字列 getUser が追加または削除されたコミットを探す
git log main..featurefeature にあって main にないコミット
git diff作業ディレクトリの変更のうち、まだインデックスに追加していないもの
git diff --staged直前のコミットに対するインデックスの変更(--cached と同じ)
git diff main feature2つのブランチの先端の差分
git diff HEAD~3 -- src/直近3コミットのうち、src フォルダ内の変更
git show a1b2c3d特定のコミットのメタデータと差分
git show HEAD:README.md最新のコミット時点のファイルの内容
git blame app.js各行を最後に変更したユーザーとコミット
git shortlog -sn作成者ごとのコミット数

コミットを指定する記法は、どの場面でも役立ちます。HEAD は現在のコミット、HEAD~1 はその親、HEAD~3 は最初の親を3つさかのぼったコミット、HEAD^2 はマージコミットの2番目の親です。

ブランチ: 作成、切り替え、削除

Git 2.23以降では、ブランチ操作に git switch、ファイルの復元に git restore を使えます。これらは、多機能だった git checkout を分けたものです。従来の形式も引き続き動作します。

コマンド内容
git branchローカルブランチの一覧。現在のブランチには * が付く
git branch -aローカルブランチとリモートブランチ(リモート追跡ブランチ)の一覧
git branch -vv各ブランチの最新コミットと、upstreamに対する遅れ・進みを表示する
git branch feature/login切り替えずにブランチを作成する
git switch feature/loginブランチに切り替える
git switch -c feature/loginブランチを作成して切り替える(git checkout -b と同じ)
git switch -直前のブランチに戻る
git branch -m new-name現在のブランチの名前を変更する
git branch -d feature/loginマージ済みのブランチを削除する
git branch -D feature/loginマージされていなくても強制的に削除する
git branch --merged現在のブランチにマージ済みのブランチ(削除の候補)

マージとリベース

コマンド内容
git merge featurefeature を現在のブランチに統合する(可能な場合は早送り)
git merge --no-ff feature常にマージコミットを作成する
git merge --squash featureブランチのすべての変更を1つにまとめてインデックスに入れる。その後 git commit
git merge --abortコンフリクトのあるマージを中止し、元の状態に戻す
git rebase main現在のブランチのコミットを main の上に付け替える
git rebase -i HEAD~4対話的に、直近4コミットを統合(squash)、名前変更、並べ替え、削除する
git rebase --continueコンフリクトを解決した後に続行する
git rebase --abortリベースを完全に取り消す
git cherry-pick a1b2c3d1つのコミットを現在のブランチに新しいコミットとして適用する

マージのコンフリクトは、ほとんどの場合次の手順で解決します。

git merge feature
# CONFLICT (content): Merge conflict in app.js
git status                 # ファイルは "both modified" の欄に表示される
# app.js を編集し、<<<<<<< ======= >>>>>>> のマーカーを削除する
git add app.js
git commit                 # Gitがマージコミットのメッセージを自動で用意する

リベースの基本ルール: 共有ブランチにすでにあり、ほかの人が作業の土台にしているコミットはリベースしないでください。

リモートリポジトリの操作

コマンド内容
git remote -vリモートの一覧とそのアドレス
git remote add origin git@github.com:user/repo.gitリモートリポジトリを origin という名前で登録する
git remote set-url origin NEW_URLリモートのアドレスを変更する(例: HTTPSからSSHへ)
git remote remove upstreamリモートの登録を削除する
git fetch新しいコミットとブランチをダウンロードする。ローカルのファイルは変更しない
git fetch --prune上記に加え、サーバーで削除されたブランチへの参照を削除する
git pullgit fetch に加え、upstreamブランチを現在のブランチにマージする
git pull --rebasegit fetch に加え、自分のコミットを取得した内容の上にリベースする
git push現在のブランチのコミットをupstreamに送信する
git push -u origin feature/loginupstreamを設定しながら、ブランチを初めて送信する
git push --force-with-leaseリモートのブランチを上書きする。ただし、他の人の新しいコミットがない場合に限る
git push origin --delete feature/loginサーバー上のブランチを削除する
git push --tagsローカルのタグをすべて送信する

git push --force の代わりに --force-with-lease を使う習慣をつけましょう。同じブランチに誰かがプッシュしていた場合、そのコマンドは他の人の作業を上書きすることを拒否します。

変更の取り消し

Gitで最も慎重になるべき部分です。コマンドを選ぶ前に、変更がファイルにだけあるのか、インデックスにあるのか、ローカルのコミットにあるのか、すでに公開されたコミットにあるのかを確認してください。

状況コマンド
ファイルの変更を取り消す(最新のコミットの状態に戻す)git restore app.js
変更を残したまま、ファイルをインデックスから外すgit restore --staged app.js
特定のコミットの時点のファイルを復元するgit restore --source=a1b2c3d app.js
直前のコミットを取り消し、変更をインデックスに残すgit reset --soft HEAD~1
直前のコミットを取り消し、変更をファイルに残すgit reset HEAD~1(デフォルトは --mixed モード)
直前のコミットとその変更をすべて削除するgit reset --hard HEAD~1
公開済みのコミットを、逆の操作を行う新しいコミットで取り消すgit revert a1b2c3d
マージコミットを取り消すgit revert -m 1 <merge-hash>
削除される追跡外のファイルを確認するgit clean -n
追跡外のファイルとフォルダを削除するgit clean -fd
reset やリベースの後で「失われた」コミットを見つけるgit reflog、次に git reset --hard HEAD@{2}

git reset --hard と git clean -f は、コミットされていない変更を完全に削除します。reflogに残るのはコミットだけで、作業ディレクトリの変更は残りません。実行前には git stash または少なくとも git status を確認してください。

stash: 途中の作業を一時退避する

コマンド内容
git stash追跡中のファイルの変更を退避し、作業ディレクトリをきれいにする
git stash push -u -m "wip: フォーム"追跡外のファイルも含めて、名前を付けて退避する
git stash list退避の一覧: stash@{0}、stash@{1} …
git stash show -p stash@{0}退避した内容の差分を表示する
git stash pop最新の退避を戻し、一覧から削除する
git stash apply stash@{1}退避を戻すが、一覧には残す
git stash drop stash@{1}1つの退避を削除する
git stash branch fix-form退避時のコミットからブランチを作成し、退避を適用する

タグとリリース

コマンド内容
git tagタグの一覧
git tag -a v1.2.0 -m "リリース 1.2.0"作成者、日時、メッセージを含む注釈付きタグ
git tag v1.2.0 a1b2c3d特定のコミットに付ける軽量タグ
git push origin v1.2.01つのタグを送信する
git tag -d v1.2.0ローカルのタグを削除する
git push origin --delete v1.2.0サーバー上のタグを削除する
git describe --tags最も近いタグと、その後のコミット数(例: v1.2.0-3-ga1b2c3d)

応用的なGitコマンド

コマンド内容
git bisect start、git bisect bad、git bisect good v1.1.0不具合を入れたコミットを二分探索で見つける。終了時は git bisect reset
git worktree add ../hotfix main同じリポジトリの別ブランチを使う、2つ目の作業ディレクトリを作る
git submodule update --init --recursiveクローン後にサブモジュールを取得する
git grep "TODO"追跡中のファイルを高速に検索する
git format-patch -1 HEAD / git apply fix.patchコミットをパッチに保存し、そのパッチを作業ディレクトリに適用する
git gcオブジェクトをまとめ、リポジトリを整理する(通常はGitが自動で行う)

よくあるミスと対処法

新しいブランチではなく main にコミットしてしまった

まだプッシュしていないコミットであれば、現在のコミットを指すブランチを作り、main を1つ戻します。

git branch feature/login      # ブランチが自分のコミットを指すようにする
git reset --hard HEAD~1       # main を1つ前に戻す
git switch feature/login

直前のコミットに入れ忘れたファイルがある

git add forgotten.js
git commit --amend --no-edit

push が rejected(non-fast-forward)で拒否された

サーバーには、あなたのローカルにないコミットがあります。先に取り込んでから送信してください。

git pull --rebase
git push

パスワードの入ったファイルを誤ってコミットした

追跡から外し、.gitignore に追加します: git rm --cached .env の後にコミットします。そのコミットがすでに公開されていれば、秘密情報は漏えいしたものとみなし、再発行してください。履歴から消えたわけではありません。

まとめ

日常の作業には、status、add、commit、switch、merge、pull、push、log --oneline の基本セットで十分です。取り消しには、restore、reset、revert を使い分けます。コミットが公開済みかどうかで選んでください。reflog は最後の手段として覚えておくと安心です。このチートシートのGitコマンドはすべて、Gitのコースで実際に自分のリポジトリを使って試すことができます。

よくある質問

Gitの初心者は、いくつのコマンドを覚えればよいですか?

最初は10〜12個で十分です。init、clone、status、add、commit、log、diff、branch、switch、merge、pull、push です。ほかのコマンドは、必要になったときに覚えれば問題ありません。

git switch と git checkout の違いは何ですか?

git switch はブランチの切り替えと作成だけを行い、git checkout はファイルの復元も行います。ブランチとファイルを取り違えて変更を失わないように、switch と restore に分けられました。

どのGitコマンドの使い方も、ヘルプで確認できますか?

はい。git help コマンド名 で完全なマニュアル、git コマンド名 -h で主なオプションの短い一覧を表示できます。同じドキュメントは git-scm.com でも読めます。

長いGitコマンドを短くする方法はありますか?

エイリアスを使えます。git config --global alias.lg "log --oneline --graph --all" と設定すると、git lg と入力するだけで済みます。

これらのコマンドはWindowsでも使えますか?

はい。コマンドはどのOSでも同じです。Windowsでは Git Bash、PowerShell、またはエディタのターミナルで実行できます。