プログラミング
 Computer >> コンピューター >  >> プログラミング >> プログラミング

Gitコミット完全ガイド!git commitの基本構文から--amend、良いメッセージの書き方まで

Gitリポジトリへの変更の保存は、単にファイルを保存するだけではありません。Gitバージョン管理システムは、より精緻な変更追跡の仕組みを採用しており、開発者はリポジトリ内のコードに対する変更を細かく制御できます。

git commitコマンドは、プロジェクトへの変更をリポジトリに「保存」する一連の流れの中のひとつのステップです。まずgit addコマンドでコミットに含める変更をステージングし、次にgit commitでその変更を含むコミットを作成します。最後にgit pushでコミットを中央リポジトリへプッシュします。

このチュートリアルでは、実例を交えながらgit commitコマンドでコミットを作成する方法を解説します。読み終える頃には、git commitを使いこなせるようになっているでしょう。

Gitコミットとは

コミットは、Gitバージョン管理システムにおいて非常に重要な役割を担っています。

コミットは「プロジェクトの歴史におけるある時点のスナップショット」と考えると分かりやすいでしょう。コミットを作成すると、その時点でのプロジェクト内のすべてのファイルやディレクトリの状態が記録されます。

この記録は後から参照でき、ある時点でプロジェクトがどのような状態だったのか、誰がどのファイルにどんな変更を加えたのかを確認できます。まさにコミットがあるからこそ、開発者はリポジトリが時間とともにどう進化してきたかを包括的に記録・把握できるのです。

他のバージョン管理システムと異なり、Gitのコミットは開発者自身が準備を整えるまで中央リポジトリには影響しません。つまり、コミットはローカルでの変更とメインリポジトリとの間の緩衝材として機能します。

言い換えれば、多くのコントリビューターが注目しているメインリポジトリに直接変更を加えるのではなく、まずローカルリポジトリでコミットを行い、後から中央リポジトリへプッシュすることが可能です。

コミットの作成は、Gitで変更を「保存」する流れの中では最後から2番目のステップにあたります。コミットを作成したら、次はgit pushで変更を中央リポジトリにプッシュします。

git commitの使い方

git commitコマンドは、ステージングされたすべての変更をローカルリポジトリに保存します。

「ステージされた変更」とは、git addコマンドでステージングエリアに追加されたファイル群を指します。git addコマンドの詳細については、初心者向けガイドを参照してください。

それでは、git commitコマンドの具体的な使い方を見ていきましょう。

git commit

最も基本的な使い方は以下の通りです。

git commit

このコマンドを実行すると、ステージングされた変更がローカルリポジトリにコミットされます。コマンド実行時にはテキストエディタが開き、コミットメッセージの入力を求められます。

コミットメッセージには、そのコミットでリポジトリに加えた変更内容を簡潔に記述します。メッセージを書き終えてテキストエディタを閉じると、コミットが作成されます。

git commit -a

-aフラグ(allの略)を使うと、変更されたすべてのファイルを自動的にステージしてコミットできます。

たとえば、CONTRIBUTORS.mdというファイルをすでにリポジトリにコミット済みだとしましょう。このファイルを編集した場合、git commit -aコマンドで変更をステージし、そのままコミットに含められます。

-aフラグを使えば、変更されたファイルごとに個別にgit addを実行する手間が省けます。-aフラグは「変更されたすべてのファイルをステージせよ」とGitに指示するためです。ただし注意点として、-aフラグは新規ファイルをステージしません。たとえば新しくREADME.mdを作成した場合、先にgit addを実行しない限りステージングされません。

構文は以下の通りです。

git commit -a

このコマンドにより、変更されたすべてのファイルが自動的にステージされ、コミット対象となります。

git commit -m

おそらく最もよく使われるのが-mフラグです。-mはmessageの略で、コミットメッセージを直接指定するために使います。

-mフラグなしでgit commitを実行すると、前述の通りテキストエディタが開きます。一方、-mフラグを使えばエディタを開くことなく、コマンドライン上で直接コミットメッセージを指定できます。

構文は以下の通りです。

git commit -m "feat: コミットメッセージ"

このコマンドでは、-mフラグを指定してコミットメッセージを直接渡しています(テキストエディタを開かずに済みます)。-mフラグに続けて、メッセージをダブルクォートで囲んで記述します。この例では「feat: コミットメッセージ」がコミットメッセージとなります。

Gitコミットの実例

実際の例を通じて、git commitコマンドの使い方を確認してみましょう。

プロジェクトで作業中にapp.pyファイルを編集したとします。必要な変更はすべて完了し、コミットを作成する準備が整った状態です。

まず、git addでファイルをステージングエリアに追加します。

git add app.py

これでapp.pyがステージングエリアに入りました。準備が整ったタイミングでコミットできます。

app.pyには新しい関数runApp()を追加しました。これをローカルリポジトリにコミットしてみましょう。

git commit -m "feat: runApp()関数を追加"

このコマンドにより、app.pyへの変更を含むコミットが作成されます。コミットメッセージは「feat: runApp()関数を追加」であり、リポジトリへの変更内容が簡潔に示されています。

Gitコミットの修正(--amend)

git commitコマンドは、直前のコミットを修正(アmend)することもできます。--amendオプションを使用します。

たとえば、コミットを作成した直後に__init__.pyファイルを追加し忘れたことに気づいたとしましょう。次のように--amendオプションで直前のコミットを修正できます。

git add __init__.py
git commit --amend -m "feat: runApp()関数の追加とinitファイルの更新"

これにより、直前のコミットに__init__.pyが含まれるようになり、コミットメッセージも新しいものに更新されます。

--amendフラグはソフトウェア開発者の間で頻繁に使われています。バージョン管理作業ではミスがつきものだからです。たとえば、ファイルのステージ忘れ、コミットメッセージの入力ミス、重要な変更がメッセージに反映されていないといったケースは珍しくありません。

そのため、ソフトウェア開発の現場では--amendフラグを日常的に活用することになるでしょう。

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

これまで見てきたように、git commitを使う際にコミットメッセージの記述は必須です。技術的には自由に書けますが、メッセージに含める内容はしっかり考えることをおすすめします。

良いコミットメッセージの書き方に厳密なルールはありませんが、一貫性があり説明的なメッセージを書くために、開発者の間で広く使われているベストプラクティスがいくつか存在します。

コミットメッセージを書く際に心がけたいポイントは以下の通りです。

  • 件名(1行目)は大文字で始める
  • 件名は50文字以内に収める
  • 本文では「何を」変更したかを説明する(「なぜ」ではなく)
  • 本文の各行は72文字以内に収める

これらのルールに従うことで、読みやすく解釈しやすいコミットメッセージが書けるようになります。

さらに、コミットメッセージで関連するIssueやプルリクエストに言及するのも有効です。たとえば、あるコミットがIssue #22を解決するものであれば、「fix: Issue #22を解決」というタイトルにし、本文で具体的にどんな変更によって問題を解決したのかを説明するとよいでしょう。

まとめ

git commitコマンドは、ステージングエリアにあるファイルをコミットに移すためのコマンドです。ファイルをステージングエリアに追加するgit addの後に実行します。git commitはGitリポジトリへの変更のスナップショットを作成し、開発者が任意のタイミングでメインリポジトリへプッシュできるようにします。

このチュートリアルでは、git commitコマンドを使ってGitリポジトリに変更をコミットする方法を解説しました。これであなたも、git commitをプロフェッショナルのように使いこなせるはずです!

  1. Gitリセットでコミットを取り消す!基本から実践テクニックまで徹底解説

    個人でもチームでも、プロジェクトを進めていると「コミットを取り消したい」という場面に遭遇することがあります。そんなときに頼りになるのが git reset コマンドです。まさに命綱とも言えるツールの一つでしょう。 Gitの追跡メカニズム git reset を理解する前に、まずGitの内部構造について押さえておきましょう。Gitは、ノードとポインタで構成されるツリー構造によってファイルを管理・追跡しています。 ローカルのGitリポジトリには、基本的に次の3つの「ツリー」が存在します。 作業ディレクトリ(Working Directory):ワーキングツリーとも呼ばれ、ローカルディレク

  2. Git cherry-pickの使い方をステップバイステップで解説

    開発を始めたばかりの頃、多くの人はgitのコマンドを繰り返し使う中で自然と覚えていきます。git pull、git push、git commitといった基本的なコマンドの意味はすぐに理解できるでしょう。しかし、規模の大きいプロジェクトに参加し、チームで開発するようになると、コードベースのバージョン管理履歴を整理された状態に保つために、より高度なgitコマンドを学ぶ必要が出てきます。 そのようなコマンドの一つが「git cherry-pick」です。このコマンドは、あるブランチから特定のコミットだけを取り出し、別のフィーチャーブランチやmasterブランチのHEADに適用したい場合に使用しま