TechHub

エンジニアの成長をサポートする技術情報サイト

← 記事一覧に戻る

Gitの基本的な使い方は?初心者向け完全ガイド

公開日: 2024年1月20日 著者: mogura
Gitの基本的な使い方は?初心者向け完全ガイド

疑問

Gitの基本的な使い方を学びたいのですが、どのようなコマンドや操作が必要なのでしょうか?バージョン管理の基本から、ブランチやマージまで一緒に学んでいきましょう。

導入

Gitは、ソフトウェア開発において最も広く使用されているバージョン管理システムです。コードの変更履歴を追跡し、複数の開発者が協力して作業できるようにする強力なツールです。

Gitを使いこなすことで、コードの変更を安全に管理し、過去のバージョンに戻ったり、複数の機能を並行して開発したりすることが可能になります。本記事では、Gitの基本的な概念から、実践的なコマンド、ブランチ戦略まで、段階的に解説していきます。

Gitのイメージ

解説

1. Gitとは何か

Gitは、分散型バージョン管理システムです。ファイルの変更履歴を記録し、いつでも過去の状態に戻すことができます。

Gitの主な特徴

- 分散型: 各開発者がローカルに完全な履歴を持つ
- 高速: ほとんどの操作がローカルで実行される
- ブランチ機能: 複数の開発ラインを並行して管理
- 統合性: データの整合性を保証

2. Gitの初期設定

Gitを使い始める前に、ユーザー名とメールアドレスなどの基本的な設定を行いましょう。これらの設定は、コミット時に記録される情報として使用されます。

よく使う設定

Gitの初期設定では、ユーザー名とメールアドレスを設定します。これらの情報は、すべてのコミットに記録され、誰が変更を行ったかを識別するために使用されます。グローバル設定とローカル設定の両方が可能です。

ユーザー名とメールアドレスの設定

Gitのユーザー名とメールアドレスを設定するコマンドです。

# グローバル設定(すべてのリポジトリに適用)
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"

# ローカル設定(現在のリポジトリのみに適用)
git config user.name "Your Name"
git config user.email "your.email@example.com"

# 設定の確認
git config --global user.name
git config --global user.email

その他の便利な設定

よく使用されるその他のGit設定です。

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

# カラー出力を有効化
git config --global color.ui auto

# エディタの設定(例:VS Code)
git config --global core.editor "code --wait"

# 改行コードの自動変換(Windows)
git config --global core.autocrlf true

# 改行コードの自動変換(Mac/Linux)
git config --global core.autocrlf input

# すべての設定を確認
git config --list

3. リポジトリの作成と初期化

Gitリポジトリを作成する方法は2つあります。新しいプロジェクトを始める場合は、ローカルでリポジトリを初期化します。既存のプロジェクトに参加する場合は、リモートリポジトリをクローンします。

新しいリポジトリを作成する

新しいプロジェクトを始める場合は、プロジェクトのディレクトリで`git init`コマンドを実行します。これにより、`.git`ディレクトリが作成され、Gitリポジトリとして管理できるようになります。

既存のリモートリポジトリをクローンする

既存のプロジェクトに参加する場合は、`git clone`コマンドを使用してリモートリポジトリをローカルにコピーします。GitHubやGitLabなどのリモートリポジトリから、プロジェクトの完全な履歴を含めてダウンロードできます。

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

既存のディレクトリでGitリポジトリを初期化する方法です。

# プロジェクトディレクトリに移動
cd my-project

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

# リポジトリが初期化されたことを確認
ls -la  # .gitディレクトリが作成されていることを確認

リモートリポジトリのクローン

GitHubやGitLabなどのリモートリポジトリをクローンする方法です。

# HTTPSを使用してクローン
git clone https://github.com/username/repository.git

# SSHを使用してクローン
git clone git@github.com:username/repository.git

# 特定のディレクトリ名でクローン
git clone https://github.com/username/repository.git my-project

# クローン後、ディレクトリに移動
cd repository

4. 基本的なGitのワークフロー

Gitの基本的なワークフローは、作業ディレクトリ、ステージングエリア、リポジトリの3つの領域で構成されます。ファイルの状態を確認し、適切に管理することが重要です。

ファイルの状態を確認する

`git status`コマンドを使用すると、作業ディレクトリとステージングエリアの状態を確認できます。どのファイルが変更されているか、どのファイルがステージングされているか、どのファイルが追跡されていないかを確認できます。

ファイルの状態を確認

作業ディレクトリとステージングエリアの状態を確認するコマンドです。

# ファイルの状態を確認
git status

# より詳細な情報を表示
git status -v

# 短縮形式で表示
git status -s

# ファイルの変更内容を確認
git diff

# ステージングエリアの変更内容を確認
git diff --staged

5. ファイルの追加とコミット

ファイルを編集した後、ステージングエリアに追加してからコミットすることで、変更を記録します。良いコミットメッセージを書くことで、後から履歴を追跡しやすくなります。

ファイルをステージングエリアに追加

`git add`コマンドを使用すると、変更したファイルをステージングエリアに追加できます。特定のファイルを追加するか、すべての変更を一度に追加することができます。

コミットを作成する

`git commit`コマンドを使用すると、ステージングエリアに追加した変更をコミットできます。コミットメッセージを付けることで、何を変更したのかを記録できます。

良いコミットメッセージの書き方

良いコミットメッセージは、変更の内容を明確に説明します。1行目に簡潔な要約を書き、必要に応じて詳細な説明を追加します。動詞で始め、現在形で書くのが一般的です。

ファイルをステージングエリアに追加

変更したファイルをステージングエリアに追加するコマンドです。

# 特定のファイルを追加
git add filename.txt

# 複数のファイルを追加
git add file1.txt file2.txt

# すべての変更を追加
git add .

# 特定の拡張子のファイルを追加
git add *.js

# インタラクティブモードで追加
git add -i

コミットを作成する

ステージングエリアに追加した変更をコミットするコマンドです。

# コミットメッセージを指定してコミット
git commit -m "Add new feature"

# エディタを開いてコミットメッセージを入力
git commit

# すべての変更をステージングしてコミット(新規ファイルは除く)
git commit -a -m "Update existing files"

# 直前のコミットメッセージを変更
git commit --amend -m "New commit message"

良いコミットメッセージの例

良いコミットメッセージの書き方の例です。

# 良い例
# 1行目: 簡潔な要約(50文字以内)
# 2行目: 空行
# 3行目以降: 詳細な説明(必要に応じて)

git commit -m "Add user authentication feature

- Implement login functionality
- Add password validation
- Create user session management"

# 悪い例(避けるべき)
git commit -m "fix"
git commit -m "update"
git commit -m "changes"

6. 履歴の確認

Gitのコミット履歴を確認することで、プロジェクトの変更履歴を追跡できます。`git log`コマンドを使用して、コミット履歴を様々な形式で表示できます。

コミット履歴を確認する

`git log`コマンドを使用すると、コミット履歴を確認できます。デフォルトでは、コミットハッシュ、作者、日時、コミットメッセージが表示されます。様々なオプションを使用して、表示形式をカスタマイズできます。

特定のコミットを確認する

`git show`コマンドを使用すると、特定のコミットの詳細を確認できます。コミットメッセージ、変更されたファイル、変更内容の差分が表示されます。

コミット履歴を確認

コミット履歴を確認するコマンドです。

# 基本的なコミット履歴
git log

# 1行形式で表示
git log --oneline

# グラフ形式で表示
git log --graph --oneline --all

# 最近の5件のみ表示
git log -5

# 特定のファイルの履歴を表示
git log filename.txt

# 作者ごとに表示
git log --author="Author Name"

# 日付範囲で絞り込み
git log --since="2024-01-01" --until="2024-12-31"

特定のコミットを確認

特定のコミットの詳細を確認するコマンドです。

# 最新のコミットを表示
git show

# 特定のコミットを表示
git show commit-hash

# コミットの統計情報を表示
git show --stat commit-hash

# コミットの変更内容のみを表示
git show --name-only commit-hash

7. 変更の取り消し

Gitでは、作業ディレクトリ、ステージングエリア、コミットの各段階で変更を取り消すことができます。状況に応じて適切なコマンドを使用することが重要です。

作業ディレクトリの変更を取り消す

作業ディレクトリで変更したファイルを、最後のコミット状態に戻すことができます。`git checkout`または`git restore`コマンドを使用します。注意: この操作は変更を完全に失います。

ステージングを取り消す

ステージングエリアに追加したファイルを取り消すことができます。ファイルは作業ディレクトリに残り、変更内容は保持されます。

コミットを取り消す

コミットを取り消す方法は2つあります。`git reset`は履歴を書き換えますが、`git revert`は新しいコミットを作成して変更を取り消します。既にプッシュしたコミットの場合は、`git revert`を使用するのが安全です。

作業ディレクトリの変更を取り消す

作業ディレクトリの変更を取り消すコマンドです。

# 特定のファイルの変更を取り消す
git checkout -- filename.txt
# または
git restore filename.txt

# すべての変更を取り消す
git checkout -- .
# または
git restore .

ステージングを取り消す

ステージングエリアからファイルを取り消すコマンドです。

# 特定のファイルをステージングから取り消す
git reset HEAD filename.txt
# または
git restore --staged filename.txt

# すべてのファイルをステージングから取り消す
git reset HEAD

コミットを取り消す

コミットを取り消すコマンドです。

# 最新のコミットを取り消す(変更は保持)
git reset --soft HEAD~1

# 最新のコミットを取り消す(変更も取り消す)
git reset --hard HEAD~1

# 特定のコミットまで戻る
git reset --hard commit-hash

# コミットを取り消す新しいコミットを作成(安全)
git revert HEAD

# 特定のコミットをrevert
git revert commit-hash

8. ブランチの操作

ブランチを使用することで、複数の機能を並行して開発できます。新しいブランチを作成し、作業を進めた後、メインブランチにマージします。

ブランチの作成と切り替え

新しいブランチを作成するには、`git branch`コマンドでブランチを作成し、`git checkout`で切り替えます。または、`git checkout -b`で作成と切り替えを一度に行うことができます。

ブランチの切り替え

ブランチを切り替えるには、`git checkout`または`git switch`コマンドを使用します。作業ディレクトリの内容が、選択したブランチの状態に変わります。

ブランチのマージ

ブランチをマージするには、マージ先のブランチに切り替えてから、`git merge`コマンドを実行します。変更が統合され、マージコミットが作成されます。

ブランチの作成と切り替え

ブランチを作成し、切り替えるコマンドです。

# ブランチの一覧を表示
git branch

# 新しいブランチを作成
git branch feature-branch

# ブランチを作成して切り替え
git checkout -b feature-branch
# または
git switch -c feature-branch

# リモートブランチから新しいブランチを作成
git checkout -b local-branch origin/remote-branch

ブランチの切り替え

ブランチを切り替えるコマンドです。

# ブランチを切り替え
git checkout branch-name
# または
git switch branch-name

# 前のブランチに戻る
git checkout -
# または
git switch -

ブランチのマージ

ブランチをマージするコマンドです。

# マージ先のブランチに切り替え
git checkout main

# ブランチをマージ
git merge feature-branch

# マージコミットを作成せずにマージ(fast-forward)
git merge --ff-only feature-branch

# マージコミットを常に作成
git merge --no-ff feature-branch

# マージを取り消す
git merge --abort

ブランチの削除

ブランチを削除するコマンドです。

# ローカルブランチを削除
git branch -d branch-name

# 強制削除(マージされていないブランチも削除)
git branch -D branch-name

# リモートブランチを削除
git push origin --delete branch-name

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

リモートリポジトリを使用することで、複数の開発者が同じプロジェクトで協力できます。変更をプッシュして共有し、他の開発者の変更をプルして取得します。

リモートリポジトリを追加する

リモートリポジトリを追加するには、`git remote add`コマンドを使用します。通常、`origin`という名前でメインのリモートリポジトリを追加します。複数のリモートリポジトリを追加することもできます。

プッシュとプル

`git push`コマンドでローカルの変更をリモートリポジトリに送信し、`git pull`コマンドでリモートリポジトリの変更をローカルに取得します。`git fetch`と`git merge`を組み合わせることもできます。

リモートリポジトリを追加する

リモートリポジトリを追加・確認するコマンドです。

# リモートリポジトリを追加
git remote add origin https://github.com/username/repository.git

# リモートリポジトリの一覧を表示
git remote

# リモートリポジトリの詳細を表示
git remote -v

# リモートリポジトリのURLを変更
git remote set-url origin https://github.com/username/new-repository.git

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

プッシュとプル

リモートリポジトリとの同期を行うコマンドです。

# ローカルの変更をリモートにプッシュ
git push origin main

# 初回プッシュ時にupstreamを設定
git push -u origin main

# リモートの変更を取得(マージしない)
git fetch origin

# リモートの変更を取得してマージ
git pull origin main

# すべてのリモートブランチを取得
git fetch --all

# リモートブランチを確認
git branch -r

10. よくある操作とトラブルシューティング

Gitを使用する際によく遭遇する操作や問題について説明します。stash、コンフリクトの解決、ファイルの削除などの実践的な操作方法を学びます。

変更を一時的に保存する(stash)

作業中の変更をコミットせずに一時的に保存したい場合、`git stash`コマンドを使用します。ブランチを切り替える前に、作業中の変更を保存しておくことができます。

コンフリクトの解決

マージやリベース時に、同じファイルの同じ部分が異なる方法で変更されていると、コンフリクトが発生します。コンフリクトマーカーを確認し、適切な内容を選択して解決します。

ファイルをGitから削除する

ファイルをGitの管理から削除するには、`git rm`コマンドを使用します。ファイルシステムからも削除するか、Gitの管理からだけ削除するかを選択できます。

変更を一時的に保存する(stash)

作業中の変更を一時的に保存するコマンドです。

# 変更をstashに保存
git stash

# メッセージを付けてstashに保存
git stash save "Work in progress"

# stashの一覧を表示
git stash list

# 最新のstashを適用
git stash apply

# 特定のstashを適用
git stash apply stash@{0}

# stashを適用して削除
git stash pop

# stashを削除(適用しない)
git stash drop stash@{0}

# すべてのstashを削除
git stash clear

コンフリクトの解決

マージコンフリクトを解決する手順です。

# マージを実行(コンフリクトが発生)
git merge feature-branch

# コンフリクトが発生したファイルを確認
git status

# コンフリクトを解決後、ファイルをステージング
git add conflicted-file.txt

# マージを完了
git commit

# マージを取り消す
git merge --abort

# コンフリクトマーカーの例:
# <<<<<<< HEAD
# 現在のブランチの内容
# =======
# マージするブランチの内容
# >>>>>>> feature-branch

ファイルをGitから削除する

ファイルをGitの管理から削除するコマンドです。

# ファイルをGitから削除(ファイルシステムからも削除)
git rm filename.txt

# ファイルをGitから削除(ファイルシステムには残す)
git rm --cached filename.txt

# ディレクトリを再帰的に削除
git rm -r directory-name

# 削除をコミット
git commit -m "Remove file"

11. ベストプラクティス

Gitを効果的に使用するためのベストプラクティスを紹介します。.gitignoreファイルの設定、コミットの頻度、ブランチ戦略など、実践的なアドバイスを提供します。

.gitignoreの例

.gitignoreファイルを使用して、Gitで追跡しないファイルを指定します。ビルド成果物、依存関係、環境設定ファイル、IDEの設定ファイルなど、リポジトリに含めるべきでないファイルを除外できます。

.gitignoreの例

一般的な.gitignoreファイルの例です。

# 依存関係
node_modules/
vendor/

# ビルド成果物
dist/
build/
*.class
*.jar
*.war

# 環境設定ファイル
.env
.env.local
*.log

# IDEの設定ファイル
.vscode/
.idea/
*.swp
*.swo
*~

# OS固有のファイル
.DS_Store
Thumbs.db

# 一時ファイル
*.tmp
*.temp
*.cache

ベストプラクティス

Gitを使用する際のベストプラクティスです。

# 1. 小さなコミットを心がける
# 関連する変更を1つのコミットにまとめる

# 2. 意味のあるコミットメッセージを書く
# 何を変更したか、なぜ変更したかを明確に

# 3. 定期的にプッシュする
# 作業を失わないように、定期的にリモートにプッシュ

# 4. ブランチを活用する
# 機能ごとにブランチを作成し、メインブランチを保護

# 5. プルする前にコミット
# リモートの変更を取得する前に、ローカルの変更をコミット

# 6. .gitignoreを適切に設定
# 不要なファイルを追跡しないようにする

12. 実践的なワークフロー例

実際のプロジェクトで使用されるGitワークフローの例を紹介します。機能開発、バグ修正、リリース準備などの典型的なシナリオでのGitの使用方法を説明します。

機能開発のワークフロー

新しい機能を開発する際は、機能ブランチを作成し、作業を進めた後、メインブランチにマージします。このワークフローにより、メインブランチを常に安定した状態に保つことができます。

機能開発のワークフロー

新しい機能を開発する際の典型的なGitワークフローの例です。

# 1. 最新の状態を取得
git checkout main
git pull origin main

# 2. 機能ブランチを作成
git checkout -b feature/new-feature

# 3. ファイルを編集して変更をコミット
git add .
git commit -m "Add new feature"

# 4. 定期的にリモートにプッシュ
git push -u origin feature/new-feature

# 5. 作業を続ける
# ... ファイルを編集 ...
git add .
git commit -m "Update feature"
git push

# 6. メインブランチに戻ってマージ
git checkout main
git pull origin main
git merge feature/new-feature

# 7. マージをリモートにプッシュ
git push origin main

# 8. 機能ブランチを削除
git branch -d feature/new-feature
git push origin --delete feature/new-feature

バグ修正のワークフロー

バグを修正する際のGitワークフローの例です。

# 1. バグ修正ブランチを作成
git checkout -b fix/bug-description

# 2. バグを修正してコミット
git add .
git commit -m "Fix: description of the bug fix"

# 3. リモートにプッシュ
git push -u origin fix/bug-description

# 4. メインブランチにマージ
git checkout main
git pull origin main
git merge fix/bug-description
git push origin main

まとめ

Gitは、ソフトウェア開発において不可欠なバージョン管理システムです。基本的なワークフローは、ファイルを編集→git addでステージング→git commitでコミット→git pushでリモートにプッシュという流れです。

ブランチを活用することで、複数の機能を並行して開発でき、安全にコードを管理できます。小さなコミットを心がけ、意味のあるコミットメッセージを書くことで、後から履歴を追跡しやすくなります。

実践的なプロジェクトで積極的にGitを使用し、日々の開発に組み込むことで、自然と使いこなせるようになります。