Git
エンジニアのためのWebチートシート
Gitとはソースコードの変更履歴を記録・追跡するための分散型バージョン管理システムです。過去のファイルの状態に戻したり、チームで変更履歴を共有して効率良くチーム開発を行うことができます。 そんな便利なGitをチートシートにまとめてみました。
用語
リポジトリ
| 用語 | 意味 |
|---|---|
| リポジトリ | バージョン管理システムにおいて、プログラムやファイルを変更履歴を含めて保存しておく場所。 |
| ローカルリポジトリ | 自分のPCや開発サーバーに構築されたリポジトリ。一般的にリモートリポジトリをクローンして、ローカルにリポジトリを構築する。 |
| リモートリポジトリ | 外部のサーバー(代表的なものにはGitHub, BitBucket, GitLab)に構築されたリポジトリ。分散型バージョン管理システムとしつつも、複数人でチーム開発する場合にリモートリポジトリを中央集権的に利用することが多い。 |
| ワーキングツリー | ユーザーがファイルやディレクトリを編集・追加・削除する場所。 |
| インデックス(ステージングエリア) | ワーキングツリーでの変更を確定する前に、対象となる変更箇所を格納する場所。 |
ブランチ
| 用語 | 意味 |
|---|---|
| ブランチ | 変更の履歴を分岐するためのもの。分岐したブランチは互いに独立しているため、同一のリポジトリの同一ファイルを同時に編集することができる。一般的には作業完了後、mainと呼ばれるブランチに合流(マージ)させる。Git Flow |
| ローカルブランチ | ローカルリポジトリに存在するブランチ |
| リモートブランチ | リモートリポジトリに存在するブランチ |
| カレントブランチ | 現在作業中のブランチ |
様々なアクション
| 用語 | 意味 |
|---|---|
| add(する) | ワーキングツリーに存在する変更をインデックスに追加すること。 |
| コミット | インデックスに存在する変更を確定すること。Gitの履歴に変更をコミットという単位で保存する。 |
| チェックアウト | ローカル・リモートリポジトリに存在するブランチやタグ、特定のコミットをワーキングツリーに展開すること。実用的には、作業するブランチを切り替える時に使用される。 |
| コンフリクト | ファイルの変更が競合すること。 |
| 解消する(resolveする) | コンフリクトを解決して変更を取り込むこと。 |
その他
| 用語 | 意味 |
|---|---|
| タグ | コミットを参照しやすいようにある時点でのリポジトリの状態に名前をつけたもの |
| リビジョン | コミットごとに生成されるハッシュ値 |
| HEAD | カレントブランチの最新コミットのこと |
初期設定
1. ツールの設定
2. リポジトリの作成
基本的なコマンド
変更の作成
| コマンド | 意味 |
|---|---|
| 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 reflog | HEADの移動履歴を表示します。誤操作からの復旧に役立ちます。 |
モダン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. コンフリクトしているファイルを確認
2. ファイルを開いて競合マーカーを手動で編集
3. 解消したファイルをインデックスに追加
4. マージまたはリベースを完了
コミットの修正
| コマンド | 意味 |
|---|---|
| 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 start | bisectセッションを開始します。 |
| git bisect good [commit] | 現在のコミットにバグがないことをマークします。 |
| git bisect bad [commit] | 現在のコミットにバグがあることをマークします。 |
| git bisect reset | bisectセッションを終了し、元のブランチに戻ります。 |
Git Blame
| コマンド | 意味 |
|---|---|
| git blame [file] | 各行の最終変更者と変更日時を表示します。 |
| git blame -L 10,20 [file] | 指定した行範囲のみを表示します。 |
.gitignore
Gitで追跡しないファイルやディレクトリを指定します。
よく使うパターン
よく使うエイリアス
エイリアスを設定してコマンドを短縮できます。
Git Submodule
追加
| コマンド | 意味 |
|---|---|
| git submodule add https://github.com/foo/hoge.git hoge | hogeディレクトリに、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 --recursive | submoduleを更新します。親リポジトリの特定時点で参照していたsubmoduleのコミット時点にsubmoduleを更新します。このコマンドは、submoduleを含むリポジトリをcloneした際に最初に行う必要があります。 |
削除
| コマンド | 意味 |
|---|---|
git submodule deinit -f hoge git rm -f hoge | submoduleの削除をします。 |
Related Cheatsheets
Related Goods
WebTerm - Recommended tools
WebTermは、ブラウザでLinuxコマンド・Gitコマンドを安全に実行でき、チュートリアル式で学べるターミナルサンドボックスです。
AIコーディングツールの普及に伴い、CLIの基礎知識を身につける重要性は増しています。実際のターミナルを操作するのに抵抗がある方でも、WebTermはローカル環境を壊す心配がありません。「会員登録不要・無料」で利用でき、学習環境として最適です。

WebTerm
Browser Terminal Sandbox for Learning CLI
All Cheatsheets


