Gitは、分散型バージョン管理システムであり、プロジェクトのファイルやディレクトリの変更履歴を効果的に管理するためのツールです。Gitコマンドを使用して、履歴の追跡、ブランチの作成・マージ、リモートリポジトリとの同期が行えます。
主要な Git コマンド
ここでは、主要なGitコマンドについて、具体例を交えて詳しく説明します。
git init
– 新しいリポジトリの初期化git clone [リポジトリURL]
– リモートリポジトリの複製git status
– 作業中の状態確認git add [ファイル名/ディレクトリ名]
– ステージングエリアへの追加git commit -m "コミットメッセージ"
– 変更の確定git diff
– 変更点の表示git log
– コミット履歴の表示git branch
– ブランチ一覧の表示git checkout [ブランチ名]
– ブランチの切り替えgit merge [ブランチ名]
– ブランチのマージgit remote add [リモート名] [リポジトリURL]
– リモートリポジトリの追加git push [リモート名] [ブランチ名]
– リモートリポジトリへの変更のプッシュgit pull [リモート名] [ブランチ名]
– リモートリポジトリからの変更の取得
git init
新しいリポジトリを作成するために、プロジェクトディレクトリに移動してgit init
を実行します。
git init
git clone [リポジトリURL]
GitHubやGitLabからリポジトリをクローンします。以下のように、リポジトリURLを引数に指定します。
git clone https://github.com/username/repository.git
git status
作業ディレクトリの状態を確認します。変更されたファイルやステージングされているファイルが表示されます。
git status
git add [ファイル名/ディレクトリ名]
ファイルやディレクトリをステージングエリアに追加します。以下のようにファイル名やディレクトリ名を指定できます。
git add myfile.txt
git add my_directory/
git commit -m "コミットメッセージ"
ステージングされた変更をコミットし、変更履歴に記録します。適切なコミットメッセージを付けましょう。
git commit -m "Add myfile.txt and update my_directory"
git diff
コミットされていない変更を確認します。ファイル間の差分が表示されます。
git diff
git log
コミット履歴を表示します。各コミットのハッシュ、作者、日付、メッセージが表示されます。
git log
git branch
現在のリポジトリ内のブランチ一覧を表示します。
git branch
git checkout [ブランチ名]
ブランチを切り替えます。以下のようにブランチ名を指定して実行します。
git checkout my-feature-branch
git merge [ブランチ名]
他のブランチを現在のブランチにマージします。以下のようにマージするブランチ名を指定します。
git merge my-feature-branch
git remote add [リモート名] [リポジトリURL]
リモートリポジトリを追加します。リモート名とリポジトリURLを指定して実行します。
git remote add origin https://github.com/username/repository.git
git push [リモート名] [ブランチ名]
ローカルリポジトリの変更をリモートリポジトリにプッシュします。リモート名とブランチ名を指定して実行します。
git push origin my-feature-branch
git pull [リモート名] [ブランチ名]
リモートリポジトリの変更をローカルリポジトリに取り込みます。リモート名とブランチ名を指定して実行します。
git pull origin main
商用 Git VCS サービス
GitHub
- よく知られており、大規模なオープンソースコミュニティが存在しています。
- 無料プランではパブリックリポジトリが無制限で、プライベートリポジトリにも一定の制限があります。
- Marketplaceで様々なアプリケーションやサービスを利用できます。
- GitHub Actionsを使用したCI/CD(継続的インテグレーションと継続的デプロイメント)機能があります。
GitLab
- オープンソースであり、自分でホストすることができます(オンプレミス・クラウド)。
- 無料プランでもパブリックリポジトリとプライベートリポジトリが無制限で利用できます。
- GitLab CI/CDを使用したCI/CD機能があります。
- 組織向けのセキュリティ機能や監査機能が充実しています。
どちらを選ぶかは、プロジェクトやチームのニーズに応じて検討することが重要です。オープンソースコミュニティや市場での存在感を優先するならGitHub、自己ホストやオールインワンソリューションを求めるならGitLabがおすすめです。
Gitを使う上でのお作法
Gitを使う上で知っておくと良いマナーや作法は以下のようなものがあります。
適切なコミットメッセージを書く
コミットメッセージは、変更内容を簡潔且つ明確に記述することが望ましいです。イメージとして、他の開発者がそのコミットメッセージだけを読んでも、どのような変更がされたか理解できるようにすることが大切です。
小さくて意味のあるコミットを行う
小さな変更ごとにコミットを行うことで、一度に多くの変更が行われた場合に、問題が発生した際に原因を特定しやすくなります。また、履歴が見やすくなり、後から修正やリファクタリングが容易になります。
ブランチ戦略を考える
開発中の機能や修正を分けて管理するために、ブランチを活用します。一般的には、main
(またはmaster
)ブランチを安定版とし、新しい機能やバグ修正は個別のブランチで開発し、作業が完了したらmain
ブランチにマージするという流れが一般的です。
リモートリポジトリにプッシュする前にテストを行う
プッシュ前にローカルでテストを行い、問題がないことを確認するのは良い習慣です。変更内容が他者の開発や動作に悪影響を与えないよう、安定した状態でプッシュしましょう。
.gitignoreファイルを利用する
プロジェクト内でGitに追跡してほしくないファイルやディレクトリ(例: 一時ファイル、ビルド成果物、秘密情報を含むファイルなど)がある場合は、.gitignore
ファイルを作成して、それらを無視するよう設定しましょう。
コードレビューを実施する
チーム開発において、プルリクエストのコードレビューは非常に重要です。他者からのフィードバックを通じて、コードの品質を向上させることができます。また、他者の変更内容も把握することができます。
適切なタイミングでプルリクエストをマージする
コードレビューが終わり、問題がないことが確認されたら、プルリクエストをマージします。他の開発者が同時に変更を加えている場合は、適切なタイミングでマージすることが重要です。
これらの作法やマナーを守ることで、チーム開発が円滑に進み、コードの品質も向上します。
プルリクエスト (Pull Requests) のお作法
Gitでプルリクエスを扱う際に注意すべき点は以下の通りです。
明確なタイトルと詳細な説明
プルリクエストのタイトルは簡潔且つ明確にすることが重要です。また、説明欄では変更内容や目的、関連するイシュー番号、テスト方法などを記述しましょう。これにより、レビュアーが理解しやすくなります。
範囲を限定した変更
プルリクエストは、特定の問題や機能追加に集中して作成することが望ましいです。無関係な修正やリファクタリングは別のプルリクエストに分けると、レビューがしやすくなります。
最新のmainブランチからブランチを切る
他の開発者との変更競合を避けるために、最新のmain
(またはmaster
)ブランチからブランチを切って作業しましょう。また、定期的にmain
ブランチをマージしておくと、変更競合の解消が容易になります。
プルリクエストのテンプレートを活用する
チームに共通のプルリクエストテンプレートを利用することで、情報の整理やパターン化ができます。これにより、レビュアーが必要な情報を簡単に把握できるようになります。
イシュー (Issues) のお作法
Gitでイシューを扱う際に注意すべき点は以下の通りです。
明確なタイトルと詳細な説明
イシューのタイトルは簡潔且つ明確にしましょう。また、説明欄では問題の再現手順、期待する動作、実際の動作、関連するログやスクリーンショットなどを記述しておきます。これにより、他の開発者が問題を理解しやすくなります。
ラベルとマイルストーンを活用する
イシューの管理には、ラベルやマイルストーンを活用しましょう。ラベルはイシューのカテゴリや優先度を視覚的に表現でき、マイルストーンはイシューの状態や進捗を管理するのに役立ちます。
適切な担当者をアサインする
イシューに対して適切な担当者をアサインしましょう。これにより、誰がそのイシューを解決する責任を持っているか明確になります。
イシューテンプレートを利用する
チームに共通のイシューテンプレートを用意しておくと、情報の整理やパターン化ができ、問題の把握が容易になります。
これらのポイントに注意しながらプルリクエストやイシューを扱うことで、チーム内のコミュニケーションが向上し、効率的な開発が進められます。
VSCode との連携
GitとVSCodeを連携させることで、効率的な開発が可能になります。以下は、GitとVSCodeの便利な活用方法です。
Git統合機能の利用
VSCodeには、デフォルトでGit統合機能が提供されています。これにより、VSCodeのエディター内でリポジトリの状態を確認したり、コミットやブランチの操作を行うことができます。
- ソースコントロールビュー: 左サイドバーからソースコントロールアイコンをクリックすると、変更差分やステージングされたファイルを表示します。また、ここでコミットメッセージを入力してコミットを実行できます。
- ブランチの切り替え・作成: VSCodeの左下にあるブランチ名をクリックすると、ブランチの切り替えや新しいブランチの作成が可能です。
Git関連の拡張機能をインストール
VSCodeのマーケットプレイスには多くのGit関連の拡張機能があり、追加機能を利用できます。以下は、便利な拡張機能の例です。
- GitLens — Git supercharged
https://marketplace.visualstudio.com/items?itemName=eamodio.gitlens
GitLensは、リポジトリの履歴やファイルの編集履歴、ブランチ情報などが一目で分かるように表示してくれます。また、誰がどの行をいつ編集したかといった詳細情報も提供します。 - GitHub Pull Requests and Issues
https://marketplace.visualstudio.com/items?itemName=GitHub.vscode-pull-request-github
: GitHubのプルリクエストやイシューをVSCode内で管理できるようになります。レビューやコメントの閲覧や返信、プルリクエストのマージなどが可能です。
キーバインドによるGit操作の高速化
VSCodeでは、キーバインドを利用してGit操作を素早く行うことができます。以下は、便利なキーバインドの一例です。
Ctrl + Shift + G
: ソースコントロールビューを開くCtrl + Shift + P
→ “Git: Stage Changes”: 変更内容をステージするCtrl + Shift + P
→ “Git: Unstage Changes”: ステージした変更を取り消すCtrl + Shift + P
→ “Git: Commit”: コミットを実行するCtrl + Shift + P
→ “Git: Fetch”: リモートリポジトリの最新情報を取得する
これらの方法を活用することで、GitとVSCodeを効率的に連携させることができます。開発時の生産性が向上し、よりスムーズな作業が可能になります。
トラブルシューティング
Gitのトラブルシューティングで役立つ情報を以下にまとめました。
git status
を使って現在の状態を確認
問題が発生した場合、まずは git status
コマンドを使って、現在のリポジトリの状態や変更ファイルの状況を確認しましょう。
git status
git log
でコミット履歴を確認
次に、 git log
コマンドを使ってコミット履歴を表示し、問題が発生したタイミングや関連するコミットを見つけ出します。
git log --oneline --graph --decorate
ブランチ管理
誤ったブランチで作業している可能性がある場合、 git branch
コマンドを使って現在のブランチと全てのブランチを確認しましょう。
git branch
ブランチの切り替えが必要であれば、 git checkout
コマンドを使用します。
git checkout <branch-name>
ファイルの変更差分を確認
git diff
コマンドを使って、現在の変更内容やステージされていない差分を表示できます。これにより、予期しない変更があるかどうか確認できます。
git diff
コミットの変更履歴を調べる
git blame
コマンドでは、ファイル内の各行がどのコミットによって変更されたかを調べることができます。これで特定の不具合が発生した原因を突き止める手助けになります。
git blame <file-name>
コミットを取り消す・修正する
誤ったコミットを取り消す場合は、git revert
や git reset
を利用します。ただし、注意が必要です。
git revert
新しいコミットを作成して対象コミットの変更を打ち消す。
git revert <commit-hash>
git reset
コミット自体を削除する。公開済みのリポジトリでは使用しない方が良い。
git reset <commit-hash> --hard (or --soft, --mixed)
コミットメッセージを修正する場合は、git commit --amend
を使用します。
git commit --amend -m "New commit message"
コミットのマージを解除
git merge
を行った後で、そのマージを取り消したい場合は、git reflog
と git reset
コマンドを使います。
git reflog
git reset <commit-hash> --hard
これらの情報が、Gitのトラブルシューティング時に役立つでしょう。それでも問題が解決しない場合は、オンライン上のフォーラムやQ&Aサイトで質問することもお勧めします。