CheatSheet
日本語 icon日本語English iconEnglish
チートシートとはカンニングペーパーのことです。それが転じて、本来覚えることをまとめておいたものです。
要点をすぐに参照できるようにまとめてみました。

Git

エンジニアのためのWebチートシート

Gitとはソースコードの変更履歴を記録・追跡するための分散型バージョン管理システムです。過去のファイルの状態に戻したり、チームで変更履歴を共有して効率良くチーム開発を行うことができます。 そんな便利なGitをチートシートにまとめてみました。

用語

リポジトリ

用語意味
リポジトリバージョン管理システムにおいて、プログラムやファイルを変更履歴を含めて保存しておく場所。
ローカルリポジトリ自分のPCや開発サーバーに構築されたリポジトリ。一般的にリモートリポジトリをクローンして、ローカルにリポジトリを構築する。
リモートリポジトリ外部のサーバー(代表的なものにはGitHub, BitBucket, GitLab)に構築されたリポジトリ。分散型バージョン管理システムとしつつも、複数人でチーム開発する場合にリモートリポジトリを中央集権的に利用することが多い。
ワーキングツリーユーザーがファイルやディレクトリを編集・追加・削除する場所。
インデックス(ステージングエリア)ワーキングツリーでの変更を確定する前に、対象となる変更箇所を格納する場所。

ブランチ

用語意味
ブランチ変更の履歴を分岐するためのもの。分岐したブランチは互いに独立しているため、同一のリポジトリの同一ファイルを同時に編集することができる。一般的には作業完了後、mainと呼ばれるブランチに合流(マージ)させる。Git Flow
ローカルブランチローカルリポジトリに存在するブランチ
リモートブランチリモートリポジトリに存在するブランチ
カレントブランチ現在作業中のブランチ

様々なアクション

用語意味
add(する)ワーキングツリーに存在する変更をインデックスに追加すること。
コミットインデックスに存在する変更を確定すること。Gitの履歴に変更をコミットという単位で保存する。
チェックアウトローカル・リモートリポジトリに存在するブランチやタグ、特定のコミットをワーキングツリーに展開すること。実用的には、作業するブランチを切り替える時に使用される。
コンフリクトファイルの変更が競合すること。
解消する(resolveする)コンフリクトを解決して変更を取り込むこと。

その他

用語意味
タグコミットを参照しやすいようにある時点でのリポジトリの状態に名前をつけたもの
リビジョンコミットごとに生成されるハッシュ値
HEADカレントブランチの最新コミットのこと

初期設定

  • 1. ツールの設定

    # コミット操作に付加されるあなたの名前を設定します
    git config --global user.name "[name]"
    
    # コミット操作に付加されるあなたのメールアドレスを設定します
    git config --global user.email "[email address]"
  • 2. リポジトリの作成

    cd path/to/project-directory
    git init
    git remote add origin https://path/to/remote/repository
    
    # or
    
    git clone https://path/to/remote/repository

基本的なコマンド

変更の作成

コマンド意味
git statusコミット可能なすべてのファイルの一覧を表示します。
git add [file]特定のファイルやディレクトリを指定して、変更をインデックスに保存します。
git add --all (-A)全ての変更をインデックスに保存します。
git add -p変更内容をインタラクティブに確認しながら、インデックスに保存します。
git commit -m "[message]"コミットメッセージを指定して、コミットします。
git pushカレントブランチの変更をリモートブランチにアップロードします。
git push -u origin HEADカレントブランチの変更をリモートにある同名のブランチにアップロードします。

変更の整理

コマンド意味
git branch現在のリポジトリに存在するブランチの一覧を表示します。
git branch [branch-name]新規ブランチを作成します。
git checkout [branch-name]カレントブランチを指定されたブランチに切り替えます。
git branch -d [branch-name]ブランチを削除します。

変更の同期

コマンド意味
git fetchリモートリポジトリから変更の履歴をダウンロードします。
git pullリモートリポジトリから変更の履歴をダウンロードし、カレントブランチに統合します。
git merge [branch-name]指定されたブランチの履歴をカレントブランチに取り込みます。

変更の破棄

コマンド意味
git reset [file]ファイルの変更をインデックスから外します。
git reset --hard [commit]指定されたコミットの時点に戻り、それ以降の変更を全て破棄します。

変更の確認

コマンド意味
git logカレントブランチの履歴を一覧で表示します。
git diffインデックスに登録された変更と最後のバージョンとの差分を表示します。
git show [commit]指定されたコミットの変更内容とメタ情報を表示します。

実践的なコマンド

変更の一時退避(stash)

コマンド意味
git stash現在の変更を一時的に退避し、クリーンなワーキングツリーに戻します。
git stash list退避した変更の一覧を表示します。
git stash pop最新の退避を適用し、スタッシュリストから削除します。
git stash apply最新の退避を適用しますが、スタッシュリストには残します。
git stash drop [stash@{n}]指定した退避をスタッシュリストから削除します。

リベース

コマンド意味
git rebase [branch-name]指定したブランチを基点にコミット履歴を再構築します。
git rebase --continueコンフリクト解消後、リベースを続行します。
git rebase --abortリベースを中止し、元の状態に戻します。
git rebase -i [commit]インタラクティブモードでコミットの編集、統合、並び替えを行います。

チェリーピック

コマンド意味
git cherry-pick [commit]指定したコミットの変更を現在のブランチに適用します。

リバート

コマンド意味
git revert [commit]指定したコミットを打ち消す新しいコミットを作成します。
git revert --no-commit [commit]コミットせずに変更だけを適用します。

タグ管理

コマンド意味
git tagタグの一覧を表示します。
git tag [tag-name]軽量タグを作成します。
git tag -a [tag-name] -m "[message]"注釈付きタグを作成します(メッセージ付き)。
git tag -d [tag-name]ローカルのタグを削除します。
git push origin [tag-name]指定したタグをリモートにプッシュします。
git push origin --tags全てのタグをリモートにプッシュします。

リモート管理

コマンド意味
git remote -vリモートリポジトリの一覧とURLを表示します。
git remote add [name] [url]新しいリモートリポジトリを追加します。
git remote remove [name]リモートリポジトリを削除します。
git remote set-url [name] [url]リモートリポジトリのURLを変更します。

操作履歴(reflog)

コマンド意味
git reflogHEADの移動履歴を表示します。誤操作からの復旧に役立ちます。

モダンGitコマンド

Git 2.23以降で使用可能。checkoutの機能を分割した新コマンドです。

ブランチ切り替え(switch)

コマンド意味
git switch [branch-name]指定したブランチに切り替えます。
git switch -c [branch-name]新しいブランチを作成して切り替えます。
git switch -直前のブランチに切り替えます。

変更の復元(restore)

コマンド意味
git restore [file]ワーキングツリーのファイルを復元(変更を破棄)します。
git restore --staged [file]インデックスからファイルを取り消します(git reset HEADと同等)。
git restore --source=[commit] [file]指定したコミット時点のファイル内容に復元します。

トラブルシューティング

  • コンフリクトの解消

    1. コンフリクトしているファイルを確認

    git status
    # Both modified: file.txt

    2. ファイルを開いて競合マーカーを手動で編集

    <<<<<<< HEAD
    your changes
    =======
    their changes
    >>>>>>> branch-name

    3. 解消したファイルをインデックスに追加

    git add [file]

    4. マージまたはリベースを完了

    git commit  # for merge
    # or
    git rebase --continue  # for rebase

コミットの修正

コマンド意味
git commit --amend直前のコミットメッセージを修正します。
git add [file] && git commit --amend --no-edit直前のコミットにファイルを追加します。

コミットの取り消し

コマンド意味
git reset --soft HEAD^コミットを取り消し、変更はインデックスに残します。
git reset HEAD^コミットを取り消し、変更はワーキングツリーに残します。

プッシュの取り消し

コマンド意味
git revert [commit] && git pushプッシュ済みのコミットを打ち消すコミットを作成してプッシュします(安全)。
git push --force-with-leaseリモートが更新されていないことを確認してから強制プッシュします(注意が必要)。

git log の便利なオプション

コマンド意味
git log --oneline各コミットを1行で簡潔に表示します。
git log --graph --oneline --allブランチとマージの履歴をグラフ形式で表示します。
git log --author="[name]"指定した作者のコミットのみを表示します。
git log --since="2024-01-01"指定した日付以降のコミットを表示します。
git log -p各コミットの差分も一緒に表示します。
git log -S "[search-string]"指定した文字列を含む変更があるコミットを検索します。

Git Worktree

複数のワーキングツリーを同時に管理できます。ブランチを切り替えずに並行作業が可能です。

コマンド意味
git worktree list現在のワーキングツリーの一覧を表示します。
git worktree add ../[path] [branch]新しいワーキングツリーを作成します。
git worktree remove [path]指定したワーキングツリーを削除します。

Git Bisect

二分探索でバグが混入したコミットを特定します。

コマンド意味
git bisect startbisectセッションを開始します。
git bisect good [commit]現在のコミットにバグがないことをマークします。
git bisect bad [commit]現在のコミットにバグがあることをマークします。
git bisect resetbisectセッションを終了し、元のブランチに戻ります。

Git Blame

コマンド意味
git blame [file]各行の最終変更者と変更日時を表示します。
git blame -L 10,20 [file]指定した行範囲のみを表示します。

.gitignore

Gitで追跡しないファイルやディレクトリを指定します。

よく使うパターン

  • # Dependency directories
    node_modules/
    vendor/
    
    # Build outputs
    dist/
    build/
    *.min.js
    *.min.css
    
    # IDE / Editor
    .idea/
    .vscode/
    *.swp
    *.swo
    
    # OS files
    .DS_Store
    Thumbs.db
    
    # Environment files
    .env
    .env.local
    *.log
    
    # Cache
    .cache/
    *.cache

よく使うエイリアス

エイリアスを設定してコマンドを短縮できます。

  • # git status を git st で実行
    git config --global alias.st status
    
    # git checkout を git co で実行
    git config --global alias.co checkout
    
    # git branch を git br で実行
    git config --global alias.br branch
    
    # git commit を git ci で実行
    git config --global alias.ci commit
    
    # 見やすいログ表示のエイリアス
    git config --global alias.lg "log --oneline --graph --all --decorate"

Git Submodule

追加

コマンド意味
git submodule add https://github.com/foo/hoge.git hogehogeディレクトリに、GitHubにあるhogeがsubmoduleとして登録されます。

更新

コマンド意味

1. cd hoge

2. git checkout another-branch

3. cd ..

4. git add hoge

5. git commit -m "Update submodule revision"

親リポジトリの参照するsubmoduleのコミット時点を変更します。submoduleで特定のコミット時点にcheckoutした後、親リポジトリでsubmoduleをadd & commitします。
git submodule update --init --recursivesubmoduleを更新します。親リポジトリの特定時点で参照していたsubmoduleのコミット時点にsubmoduleを更新します。このコマンドは、submoduleを含むリポジトリをcloneした際に最初に行う必要があります。

削除

コマンド意味

git submodule deinit -f hoge

git rm -f hoge

submoduleの削除をします。

Related Goods

  • Gitの使い方を目的別に紹介したリファレンスです。
GitHubの使い方まで解説しています。
    Gitの使い方を目的別に紹介したリファレンスです。 GitHubの使い方まで解説しています。
    詳細をみる
  • Gitの初心者向け入門書。
コマンド操作不要で使えるSourcetree、Sourcetreeを使った活用方法を解説しています。
    Gitの初心者向け入門書。 コマンド操作不要で使えるSourcetree、Sourcetreeを使った活用方法を解説しています。
    詳細をみる
  • GitHubの実践的な使い方を、実際に手を動かす形で解説しています。
チーム開発の方法まで網羅しています。
    GitHubの実践的な使い方を、実際に手を動かす形で解説しています。 チーム開発の方法まで網羅しています。
    詳細をみる

WebTerm - Recommended tools

WebTermは、ブラウザでLinuxコマンド・Gitコマンドを安全に実行でき、チュートリアル式で学べるターミナルサンドボックスです。
AIコーディングツールの普及に伴い、CLIの基礎知識を身につける重要性は増しています。実際のターミナルを操作するのに抵抗がある方でも、WebTermはローカル環境を壊す心配がありません。「会員登録不要・無料」で利用でき、学習環境として最適です。

WebTerm Logo

WebTerm

Browser Terminal Sandbox for Learning CLI

開く

All Cheatsheets

エンジニア・プログラマー向けの便利なチートシートを多数まとめています(SP/Tablet/PC対応)
すべてのチートシートを見る