開発者のための必須Gitコマンドチートシート

· 12分で読めます

目次

Gitは現代のソフトウェア開発の基盤です。単独で作業する場合でも、数百人のチームで協力する場合でも、効率的なバージョン管理とコード管理にはGitコマンドの習得が不可欠です。

この包括的なチートシートは、基本的な操作から高度なテクニックまですべてをカバーしています。このページをブックマークして、Gitコマンドのクイックリファレンスが必要なときにいつでも参照してください。

セットアップと設定

Gitを使い始める前に、アイデンティティと設定を構成する必要があります。これらの設定は、Gitの動作とコミットの帰属方法を決定します。

初期設定

Git環境をセットアップするために、マシンごとに一度これらのコマンドを実行してください:

# 名前とメールアドレスを設定(必須)
git config --global user.name "Your Name"
git config --global user.email "[email protected]"

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

# 読みやすさのためにカラー出力を有効化
git config --global color.ui auto

# 好みのテキストエディタを設定
git config --global core.editor "code --wait"  # VS Code
git config --global core.editor "vim"          # Vim
git config --global core.editor "nano"         # Nano

# すべての設定を表示
git config --list

# 特定の設定を表示
git config user.name
git config user.email

--globalフラグは、マシン上のすべてのリポジトリに設定を適用します。単一のリポジトリの設定を構成するには、そのリポジトリに移動して--globalフラグを省略してください。

設定レベル

Gitには3つの設定レベルがあり、それぞれが前のレベルを上書きします:

レベル フラグ 場所 スコープ
システム --system /etc/gitconfig マシン上のすべてのユーザー
グローバル --global ~/.gitconfig 現在のユーザーのすべてのリポジトリ
ローカル --local .git/config 現在のリポジトリのみ

プロのヒント: 各リポジトリでローカル設定を行うことで、仕事用と個人用のプロジェクトで異なるメールアドレスを使用できます。これにより、誤って間違ったアイデンティティでコミットすることを防げます。

便利な設定オプション

# 認証情報のキャッシュを設定(パスワードの繰り返し入力を回避)
git config --global credential.helper cache
git config --global credential.helper 'cache --timeout=3600'

# 自動改行変換を有効化
git config --global core.autocrlf true   # Windows
git config --global core.autocrlf input  # Mac/Linux

# よく使うコマンドのエイリアスを設定
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.st status
git config --global alias.unstage 'reset HEAD --'
git config --global alias.last 'log -1 HEAD'

# マージツールと差分ツールを設定
git config --global merge.tool vimdiff
git config --global diff.tool vimdiff

基本的なGitコマンド

これらは毎日使用する基本的なコマンドです。高度な操作に進む前に、まずこれらをマスターしてください。

リポジトリの初期化

# 新しいGitリポジトリを初期化
git init

# 特定のブランチ名で初期化
git init -b main

# 既存のリポジトリをクローン
git clone https://github.com/user/repo.git
git clone [email protected]:user/repo.git  # SSH
git clone https://github.com/user/repo.git my-folder  # カスタムフォルダ名

# 最近の履歴のみをクローン(大きなリポジトリで高速)
git clone --depth 1 https://github.com/user/repo.git

変更の操作

# 作業ディレクトリの状態を確認
git status
git status -s  # 短い形式
git status -sb # ブランチ情報付きの短い形式

# コミット用にファイルをステージング
git add filename.js        # 単一ファイル
git add src/               # ディレクトリ全体
git add .                  # 現在のディレクトリのすべての変更
git add -A                 # リポジトリ全体のすべての変更
git add -p                 # 対話的なステージング(パッチモード)
git add *.js               # すべてのJavaScriptファイル

# ファイルのステージングを解除
git reset filename.js      # 特定のファイルをアンステージ
git reset                  # すべてのファイルをアンステージ

# ステージングされた変更をコミット
git commit -m "feat: add user authentication"
git commit -am "fix: resolve login bug"  # 追跡ファイルをステージ+コミット
git commit --amend         # 最後のコミットを修正
git commit --amend --no-edit  # メッセージを変更せずに修正

# 差分を表示
git diff                   # ステージングされていない変更
git diff --staged          # ステージングされた変更
git diff HEAD              # 最後のコミット以降のすべての変更
git diff main..feature     # ブランチ間
git diff --stat            # 変更の概要

クイックヒント: git add -pを使用して、変更を対話的にレビューしてステージングします。これは、ファイルの特定の部分のみをコミットし、他の変更をステージングしないままにするのに最適です。

ファイルの削除と移動

# ファイルを削除
git rm filename.js         # 作業ディレクトリから削除してステージング
git rm --cached filename.js # Gitから削除するが作業ディレクトリには保持
git rm -r directory/       # ディレクトリを再帰的に削除

# ファイルを移動または名前変更
git mv old-name.js new-name.js
git mv src/file.js lib/file.js  # 別のディレクトリに移動

git mvまたはgit rmを使用すると、変更は自動的にステージングされます。これは、通常のシェルコマンドを使用してから変更を個別にステージングするよりも便利です。

ブランチとマージ

ブランチはGitの最大の特徴です。メインのコードベースに干渉することなく、複数の機能を同時に作業できます。

ブランチ管理

# ブランチをリスト表示
git branch                 # ローカルブランチ
git branch -r              # リモートブランチ
git branch -a              # すべてのブランチ(ローカル+リモート)
git branch -v              # 最後のコミット情報付き
git branch --merged        # 現在のブランチにマージされたブランチ
git branch --no-merged     # まだマージされていないブランチ

# ブランチを作成
git branch feature-login   # 新しいブランチを作成
git checkout -b feature-login  # 新しいブランチを作成して切り替え
git switch -c feature-login    # checkoutの現代的な代替

# ブランチを切り替え
git checkout main          # mainブランチに切り替え
git switch main            # 現代的な代替
git checkout -            # 前のブランチに切り替え

# ブランチの名前を変更
git branch -m old-name new-name  # ブランチの名前を変更
git branch -M new-name     # 現在のブランチを強制的に名前変更

# ブランチを削除
git branch -d feature-login     # マージ済みブランチを削除
git branch -D feature-login     # 強制削除(マージされていなくても)
git push origin --delete feature-login  # リモートブランチを削除

マージ戦略

# ブランチをマージ
git merge feature-login    # feature-loginを現在のブランチにマージ
git merge --no-ff feature-login  # 早送りでもマージコミットを作成
git merge --squash feature-login # すべてのコミットを1つにまとめる

# マージを中止
git merge --abort

# 競合解決後に続行
git merge --continue
マージタイプ コマンド 使用するタイミング
早送り git merge 線形履歴、分岐なし
早送りなし git merge --no-ff 機能ブランチの履歴を保持
スカッシュ git merge --squash クリーンな履歴、すべてのコミットを結合
リベース git rebase 線形履歴、コミットを書き換え

リベース

リベースは、ブランチを新しいベースコミットに移動することでコミット履歴を書き換えます。これによりクリーンで線形な履歴が作成されますが、慎重に使用する必要があります。

# 現在のブランチをmainにリベース
git rebase main

# 対話的リベース(コミットの編集、スカッシュ、並べ替え)
git rebase -i HEAD~3       # 最後の3つのコミット
git rebase -i main         # mainから分岐して以降のすべてのコミット

# 競合解決後に続行
git rebase --continue

# 現在のコミットをスキップ
git rebase --skip

# リベースを中止
git rebase --abort

プロのヒント: 共有ブランチにプッシュされたコミットは絶対にリベースしないでください。リベースは履歴を書き換えるため、協力者に深刻な問題を引き起こす可能性があります。プッシュ前のローカルクリーンアップにのみ使用してください。

マージ競合の解決

Gitが自動的に変更をマージできない場合、手動で競合を解決する必要があります:

  1. git statusを実行して、どのファイルに競合があるかを確認
  2. 競合のあるファイルを開き、競合マーカー(<<<<<<<=======>>>>>>>)を探す
  3. マーカーを削除して競合を解決するようにファイルを編集
  4. git addで解決したファイルをステージング
  5. git commitまたはgit merge --continueでマージを完了
# マージツールを使用して競合を解決
git mergetool

# 一方の変更をすべて受け入れる
git checkout --ours filename.js    # 自分のバージョンを保持
git checkout --theirs filename.js  # 相手のバージョンを保持

リモート操作

リモートリポジトリはコラボレーションを可能にします。これらのコマンドは、GitHub、GitLab、Bitbucketなどのリモートサーバーとローカル作業を同期するのに役立ちます。

リモートの管理

# リモートリポジトリをリスト表示
git remote
git remote -v              # URLと共に

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

# リモートURLを変更
git remote set-url origin [email protected]:user/repo.git

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

# リモートの名前を変更
git remote rename origin upstream

# リモートの詳細を表示
git remote show origin

フェッチとプル

# リモートから変更をフェッチ(マージしない)
git fetch origin
git fetch --all            # すべてのリモートからフェッチ
git fetch --prune          # 削除されたリモートブランチを削除

# 変更をプル(フェッチ+マージ)
git pull origin main
git pull --rebase origin main  # マージの代わりにフェッチ+リベース
git pull --ff-only         # 早送りのみ、マージが必要な場合は失敗

# 自動スタッシュでプル
git pull --autostash

fetchpullの違いは重要です。フェッチは変更をダウンロードしますが作業ディレクトリを変更せず、プルは自動的に変更をマージします。

変更のプッシュ

# リモートにプッシュ
git push origin main
git push -u origin feature-login  # アップストリームを設定してプッシュ
git push --all             # すべてのブランチをプッシュ
git push --tags            # すべてのタグをプッシュ

# 強制プッシュ(注意して使用!)
git push --force           # リモート履歴を上書き
git push --force-with-lease # より安全な強制プッシュ、リモートが更新されていれば失敗

# リモートブランチを削除
git push origin --delete feature-login
git push origin :feature-login  # 代替構文

プロのヒント: 強制プッシュが必要な場合は、--forceの代わりに--force-with-leaseを使用してください。最後のフェッチ以降にリモートが更新されている場合、誤って他の人の作業を上書きすることを防ぎます。

追跡ブランチ

# アップストリームブランチを設定
git branch --set-upstream-to=origin/main main
git branch -u origin/main  # 短縮形

# 追跡ブランチを作成
git checkout -b feature origin/feature
git checkout --track origin/feature  # 自動命名

# 追跡関係を表示
git branch -vv

変更の退避

スタッシュは、不完全な作業をコミットせずに他の作業ができるように、変更を一時的に保管します。

# 現在の変更をスタッシュ
git stash
git stash save "work in progress on login feature"
git stash -u               # 追跡されていないファイルを含める
git stash -a               # 追跡されていないファイルと無視されたファイルを含める

# スタッシュをリスト表示
git stash list

# スタッシュした変更を適用
git stash apply            # 最新のスタッシュを適用
git stash apply stash@{2}  # 特定のスタッシュを適用
git stash pop              # 適用してスタッシュリストから削除

# スタッシュの内容を表示
git stash show
git stash show -p          # 完全な差分を表示
git stash show stash@{1}   # 特定のスタッシュを表示

# スタッシュからブランチを作成
git stash branch feature-name

# スタッシュを削除
git stash drop stash@{1}   # 特定のスタッシュを削除
git stash clear            # すべてのスタッシュを削除

スタッシュは完