Git チートシート: すべての開発者に必須のコマンド

· 12分で読めます

📑 目次

Gitは世界で最も広く使用されているバージョン管理システムで、個人のサイドプロジェクトからエンタープライズアプリケーションまで、数百万のプロジェクトを支えています。個人開発者でも大規模チームの一員でも、必須のGitコマンドを知っていれば時間を節約し、ミスを防ぐことができます。

この包括的なチートシートは、基本的な操作から高度なワークフローまで、日常的な開発作業に必要なすべてのコマンドをカバーしています。タスクタイプ別に整理されているので、必要なときに必要なものをすぐに見つけることができます。

このページをクイックリファレンスとしてブックマークしてください。GitドキュメントやREADMEファイルのフォーマットには、Markdownエディタをお試しください。

セットアップと設定

最初のコミットの前に、自分の身元を設定する必要があります。これらの設定はグローバルに保存され、あなたが行うすべてのコミットに添付されるため、他の開発者がどの変更を誰が行ったかを知ることができます。

初期セットアップ

git config --global user.name "Your Name"
git config --global user.email "[email protected]"
git config --global init.defaultBranch main
git config --global core.editor "code --wait"

--globalフラグは、これらの設定をマシン上のすべてのリポジトリに適用します。特定のプロジェクトに異なる設定が必要な場合は、そのリポジトリ内で--globalなしで同じコマンドを実行してください。

便利な設定オプション

git config --global color.ui auto              # カラー出力を有効化
git config --global core.autocrlf true         # 改行コードの処理(Windows)
git config --global core.autocrlf input        # 改行コードの処理(Mac/Linux)
git config --global pull.rebase false          # プルにマージ戦略を使用
git config --global alias.st status            # ショートカットを作成: git st
git config --global alias.co checkout          # ショートカットを作成: git co
git config --global alias.br branch            # ショートカットを作成: git br
git config --global alias.ci commit            # ショートカットを作成: git ci

プロのヒント: 頻繁に使用するコマンドのエイリアスを作成しましょう。上記のショートカットは、週に数百回のキーストロークを節約できます。git config --global alias.lg "log --oneline --graph --all"のように、視覚的なコミット履歴のためのより複雑なエイリアスも作成できます。

設定の表示と編集

git config --list                              # すべての設定を表示
git config --list --show-origin                # 各設定がどこで定義されているかを表示
git config user.name                           # 特定の設定を表示
git config --global --edit                     # エディタでグローバル設定を編集

リポジトリの作成

Gitで作業を開始するには2つの方法があります:新しいリポジトリを初期化するか、リモートサーバーから既存のリポジトリをクローンするかです。

新しいリポジトリの初期化

git init                                       # 現在のディレクトリでリポジトリを初期化
git init my-project                            # リポジトリを含む新しいディレクトリを作成
git init --bare shared-repo.git                # ベアリポジトリを作成(サーバー用)

git initを実行すると、Gitはすべてのバージョン管理情報を保存する隠し.gitディレクトリを作成します。このディレクトリには、プロジェクトの全履歴、設定、メタデータが含まれています。

既存のリポジトリのクローン

git clone https://github.com/user/repo.git     # HTTPS経由でクローン
git clone [email protected]:user/repo.git         # SSH経由でクローン
git clone <url> my-folder                      # 特定のディレクトリにクローン
git clone --depth 1 <url>                      # シャロークローン(最新のコミットのみ)
git clone --branch develop <url>               # 特定のブランチをクローン

シャロークローンは、CI/CDパイプラインや、完全な履歴なしで最新のコードだけが必要な場合に便利です。大幅に高速で、ディスク容量も少なくて済みます。

クイックヒント: パスワードを繰り返し入力しないように、HTTPSの代わりにSSH URLを使用してください。SSHキーを一度設定すれば、シームレスな認証を楽しめます。GitHub、GitLab、BitbucketはすべてSSH認証をサポートしています。

基本的なワークフローコマンド

Gitの基本的なワークフローは、3つの領域を中心に展開されます:作業ディレクトリ(あなたのファイル)、ステージングエリア(コミット準備完了の変更)、リポジトリ(コミット済みの履歴)。この流れを理解することは、Gitを効果的に使用するために不可欠です。

ステータスの確認

git status                                     # 作業ツリーのステータスを確認
git status -s                                  # 短い形式の出力
git status -sb                                 # ブランチ情報付きの短い形式

git statusを頻繁に実行してください。どのファイルが変更、ステージング、または追跡されていないかを表示し、リポジトリの現在の状態を理解するのに役立ちます。

変更のステージング

git add file.txt                               # 特定のファイルをステージング
git add *.js                                   # すべてのJavaScriptファイルをステージング
git add .                                      # すべての変更をステージング
git add -A                                     # すべての変更をステージング(削除を含む)
git add -p                                     # 対話的に変更をステージング(パッチモード)
git add -u                                     # 変更および削除されたファイルのみをステージング

ステージングエリア(インデックスとも呼ばれます)を使用すると、正確なコミットを作成できます。複数のファイルを変更した場合でも、含めたい変更だけをステージングできます。

プロのヒント: git add -pを使用して、変更をチャンクごとにレビューしてステージングしましょう。この対話モードでは、大きな変更を論理的なコミットに分割でき、履歴がよりクリーンでレビューしやすくなります。パッチモード中に?を押すと、利用可能なすべてのオプションが表示されます。

変更のコミット

git commit -m "Add user authentication"       # メッセージ付きでコミット
git commit -am "Fix login bug"                 # 追跡ファイルをステージング + コミット
git commit --amend                             # 最後のコミットを修正
git commit --amend --no-edit                   # メッセージを変更せずに修正
git commit -v                                  # コミットメッセージエディタで差分を表示

明確で説明的なコミットメッセージを書きましょう。良い形式は:短い要約(50文字以下)、その後に空白行、必要に応じて詳細な説明です。

変更の表示

git diff                                       # ステージングされていない変更を表示
git diff --staged                              # ステージングされた変更を表示
git diff HEAD                                  # 最後のコミット以降のすべての変更を表示
git diff branch1..branch2                      # 2つのブランチを比較
git diff --stat                                # 変更の統計を表示
git diff --word-diff                           # 単語レベルの差分を表示

ブランチとマージ

ブランチはGitの最も強力な機能の1つです。メインのコードベースに影響を与えることなく、機能、修正、実験を独立して作業できます。

ブランチ管理

git branch                                     # ローカルブランチをリスト表示
git branch -a                                  # すべてのブランチをリスト表示(ローカル + リモート)
git branch feature-login                       # 新しいブランチを作成
git branch -d feature-login                    # ブランチを削除(安全)
git branch -D feature-login                    # ブランチを強制削除
git branch -m old-name new-name                # ブランチの名前を変更
git branch -vv                                 # 追跡情報付きでブランチを表示

ブランチの切り替え

git checkout feature-login                     # ブランチに切り替え
git checkout -b feature-signup                 # 新しいブランチを作成して切り替え
git checkout -                                 # 前のブランチに切り替え
git switch feature-login                       # ブランチを切り替える最新の方法
git switch -c feature-signup                   # 作成して切り替え(最新の構文)

git switchコマンドは、複数の目的を持つgit checkoutのより明確な代替としてGit 2.23で導入されました。ブランチの切り替えに関しては、どちらも同じように機能します。

ブランチのマージ

git merge feature-login                        # ブランチを現在のブランチにマージ
git merge --no-ff feature-login                # マージコミットを強制(ファストフォワードなし)
git merge --squash feature-login               # コミットを1つにまとめる
git merge --abort                              # 進行中のマージをキャンセル

マージすると、Gitは2つのブランチからの変更を結合します。両方のブランチが同じ行を変更した場合、手動で解決する必要があるマージコンフリクトが発生します。

マージコンフリクトの解決

コンフリクトが発生すると、Gitはファイル内のコンフリクトセクションをマークします:

<<<<<<< HEAD
現在の変更
=======
マージされるブランチからの受信変更
>>>>>>> feature-branch

コンフリクトを解決するには:

  1. コンフリクトしているファイルを開き、コンフリクトを解決するために編集します
  2. コンフリクトマーカー(<<<<<<<=======>>>>>>>)を削除します
  3. git addで解決したファイルをステージングします
  4. git commitでマージを完了します
git status                                     # どのファイルにコンフリクトがあるかを確認
git add resolved-file.js                       # コンフリクトを解決済みとしてマーク
git merge --continue                           # 解決後にマージを続行
git merge --abort                              # 諦めて最初からやり直す

プロのヒント: ビジュアルマージツールを使用すると、コンフリクトをより簡単に解決できます。git config --global merge.tool <tool-name>で設定し(オプションにはmeld、kdiff3、vimdiff、またはIDEの組み込みツールがあります)、コンフリクトが発生したらgit mergetoolを実行してください。

リベース

git rebase main                                # 現在のブランチをmainにリベース
git rebase -i HEAD~3                           # 最後の3つのコミットを対話的にリベース
git rebase --continue                          # コンフリクト解決後に続行
git rebase --abort                             # 進行中のリベースをキャンセル
git rebase --skip                              # リベース中に現在のコミットをスキップ

リベースは、コミットを新しいベースに移動することで履歴を書き換えます。よりクリーンで直線的な履歴を作成しますが、他の人が使用している公開ブランチでは決して行うべきではありません。

リモート操作

リモートリポジトリは、インターネットまたはネットワーク上でホストされているプロジェクトのバージョンです。コラボレーションとバックアップを可能にします。

リモートの管理

git remote                                     # リモート接続をリスト表示
git remote -v                                  # URL付きでリモートをリスト表示
git remote add origin <url>                    # 新しいリモートを追加
git remote remove origin                       # リモートを削除
git remote rename origin upstream              # リモートの名前を変更
git remote set-url origin <new-url>            # リモートURLを変更
git remote show origin                         # 詳細なリモート情報を表示

フェッチとプル

git fetch                                      # リモートの変更をダウンロード
git fetch origin                               # 特定のリモートからフェッチ
git fetch --all                                # すべてのリモートからフェッチ
git fetch --prune                              # 削除されたリモートブランチを削除
git pull                                       # リモートの変更をフェッチしてマージ
git pull --rebase                              # マージの代わりにリベースしてフェッチ
git pull origin main                           # 特定のブランチをプル

fetchpullの違い:fetchは変更をダウンロードしますが作業ディレクトリを変更せず、pullはフェッチして即座に変更をマージします。

変更のプッシュ

git push                                       # デフォルトのリモート/ブランチにプッシュ
git push origin main                           # 特定のリモート/ブランチにプッシュ
git push -u origin feature-login               # プッシュしてアップストリーム追跡を設定
git push --all                                 # すべてのブランチをプッシュ
git push --tags                                # すべてのタグをプッシュ
git push --force                               # 強制プッシュ(危険!)
git push --force-with-lease                    # より安全な強制プッシュ
<