Git Commit: マスター クラス

公開: 2023-02-26
Linux コマンド プロンプトを表示している青色の背景のラップトップ。
Fatmawati achmad zaenuri/Shutterstock.com
Git commit コマンドは、作業ディレクトリからの変更のコピーを Git リポジトリに保存します。 ただし、既存のコミットを修正したり、コミットを元に戻したりするためにも使用できます。

バージョン管理システムの基本的な要件は、さまざまなバージョンのファイルを保存することです。 Git では、これを行うコマンドはcommitです。 知っておくべきことはすべてここにあります。

目次

Git のコミットとは
commit コマンドの設定
commit コマンドの使用
基本的なコミット
自動ステージング ファイル
ステージングとコミットを同時に行う
別のブランチへのコミット
コミットの変更
コミットからの変更の削除
コミット全体を元に戻す
Git スイス アーミー ナイフ

Git のコミットとは

コミットは、開発履歴を構成するプロジェクトのライフサイクル全体で作成される一連のスナップショットです。 コミットは、過去のさまざまな時点でのプロジェクトのバージョンを抽出できるようにするものです。 なぜそれが重要なのですか?

バージョン管理システム (VCS) は、ソフトウェア ソース コードおよび開発プロジェクトで最も一般的に使用されます。 ただし、書籍の章を含む Markdown ファイルなど、テキスト ファイルの任意のコレクションで問題なく使用できます。

プロジェクト ディレクトリ内のすべてのファイルを VCS で処理したくない場合があるため、バージョン管理するファイルを指定できる必要があります。 これにより、プロジェクトのバージョン管理ビューに追加されます。 変更が監視されます。

これを実現する別の方法は、無視リストを使用することです。 これにより、常に無視する必要があるファイル、ディレクトリ、またはファイルの種類が Git に通知されます。

時間が経つにつれて、新しいファイルがプロジェクトに追加されるため、バージョン管理システムに追加する必要があるものもあります。 Git では、これはaddコマンドによって処理されます。 実際、 addコマンドは 2 つのサービスを提供します。

プロジェクトに加えられた変更の履歴を維持するために、 commitコマンドを使用して、定期的に Git にプロジェクトの状態のスナップショットを保存するように依頼します。 これは、ワークフローでaddコマンドが再表示される場所です。 addコマンドを使用して、どの変更ファイルをスナップショットに含めたいかを Git に伝えます。 次にcommitを使用して Git にスナップショットを作成するように指示します。

commit コマンドの設定

コミットに関する情報は一緒に保存されるため、誰がいつコミットしたか、コミットに何が含まれているかを常に知ることができます。 このメタデータの一部は、コミット メッセージなど、コミット時にキャプチャされます。

開発チームのメンバーの ID に関連するメタデータは、同じ情報が繰り返し提供されるのを防ぐために、各ユーザーが構成できます。

コンピューター上のすべてのリポジトリに対してグローバルに名前を設定するには、このコマンドを使用します。

 git config --global user.name "Dave McKay" 

グローバル Git ユーザー名の設定

名前が設定されていることを確認するには、次のコマンドを使用します。

 git config --global user.name 

Git グローバル ユーザー名の確認

特定のリポジトリで別の名前を使用する必要がある場合は、プロジェクトのディレクトリに移動し、 --globalオプションを指定せずに同じコマンドを使用します。

 git config user.name "マッケイ、デビッド"
 git config user.name 

リポジトリ固有の Git ユーザー名の設定

このリポジトリには別のデフォルトのユーザー名があり、グローバル名はまだ他のリポジトリに使用されています。

同様の方法で、 --globalオプションを含めたり省略したりすることで、電子メール アドレスをグローバルに、または単一のリポジトリに設定できます。

 git config user.email "[email protected]"
 git config --global user.email "[email protected]"
 git config user.email
 git config --global user.email 

グローバルおよびリポジトリ固有の Git デフォルト ユーザー メール アドレスの設定

これらの設定は構成ファイルに保持されます。 グローバル Git 設定は「~/.gitconfig」に保持され、リポジトリ固有の設定はリポジトリの「.git/config」ファイルに保持されます。

commitコマンドは、動作中にこれらの値を参照して使用します。

commit コマンドの使用

commitコマンドの基本的な使用法は、インデックスと呼ばれるステージング領域にあるファイルを取得し、それらをリポジトリの現在のブランチにコミットとして保存することです。

基本的なコミット

ファイルが変更されたプロジェクトがあります。 addコマンドを使用してファイルをステージングし、コミットします。 変更の目的を簡単に説明できるように、 -m (コミット メッセージ) オプションを使用しています。 このオプションを使用しない場合、コミットが行われるときにコミット メッセージを求めるプロンプトが表示されます。 コマンドラインで追加する方が便利です。

 git add jibber.c
 git commit -m "更新されたヘルプ テキスト" 

単一ファイルのステージングとコミット

git logコマンドを使用すると、コミットの詳細を時系列で確認でき、最新のコミットがリストの一番上に表示されます。

 git ログ

Git リポジトリ ログの確認

コミットはlessに表示されます。

Git ログの上部にある最新のコミット

コミットは、以前に提供した名前と電子メール アドレスでタグ付けされており、コミット メッセージも記録されています。

自動ステージング ファイル

多くのファイルをステージングするには、少し時間がかかる場合があります。 別のアプローチは、 add-A (all) オプションを使用することです。

これにより、現在追跡されていないすべてのファイルとともに、変更されたすべてのファイルが自動的にステージングされます。 追跡されていないファイルのステージングでは、「.gitignore」ファイルの設定が考慮されます。 Git は、含めたくないと言ったファイルをステージングしません。 最後に、作業ディレクトリに存在しなくなったインデックス内のファイルがインデックスから削除されます。

明らかに、 -Aオプションを使用すると、多くのことが一度に発生する可能性があります。 --dry-runオプションを使用すると、実際に変更を実行せずに変更のプレビューを表示できます。

 git add -A --dry-run 

--dry-run を使用して、ステージングおよびステージング解除されるファイルをプレビューします

この例では、2 つの変更された既存のファイルと 2 つの新しいファイルがステージングされます。 commitコマンドを使用する前に、 -Aオプションを使用してみましょう。

 git add -A
 git commit -m "強化された解析" 

add -A オプションを使用した後の、変更されたファイルおよび新しく作成されたファイルのコミット

全体で 4 つのファイルが変更されていることがわかります。 そのうちの 2 つは、リストされている新しく作成されたファイルです。

ステージングとコミットを同時に行う

commitコマンドには、小文字の-a (すべて) オプションがあります。 これにより、ファイルのステージングとコミットが 1 ステップで実行されます。

commit -aオプションは、変更された既存のファイルをステージングしてコミットし、ファイルが作業ディレクトリから削除されている場合はインデックスから削除します。 追跡されていないファイルを自動的にステージングすることはありません

addコマンドと同様に、commit コマンドには--dry-runオプションがあり、実行前にアクションをプレビューできます。

 git commit -a --dry-run 

commit -a オプションを使用して、変更を実行せずにプレビューする

それではコマンドを実行してみましょう。

 git commit -a --dry-run 

commit -a オプションを使用してステージングとコミットを 1 ステップで行う

ファイルはステージングされ、コミットされます。

別のブランチへのコミット

作業ディレクトリ内のファイルに変更を加えた後、正しいブランチをチェックアウトしていないことに気付いた場合は、現在のブランチに影響を与えずに変更を正しいブランチにコミットする必要があります。

Git には、別のブランチにコミットするためのコマンドがありません。 しかし、Git の器用さを少しだけ活用すれば、この状況を修正することができます。

Git stashコマンドを使用して、変更のコピーを作成します。 次に、正しいブランチをチェックアウトし、stash から変更を適用します。 隠した変更を適用するには、 applyコマンドではなくpopコマンドを使用します。 popコマンドは変更を適用し、stash からも削除します。

リポジトリのnew-parserブランチにいくつかの変更を加えました。 それらは、 classic-parserブランチで作成されているはずです。

 git スタッシュ
git checkout クラシックパーサー
git stash ポップ

変更のスタッシュ、ブランチのチェックアウト、スタッシュからの変更の適用

commitを実行して、このブランチを更新できるようになりました。

 git commit -a -m "プリパーサー関数を追加" 

stash から取得した変更をコミットする

new-parserブランチに戻ると、それが最新であることがわかります。つまり、作業ディレクトリから変更が削除され、リポジトリとファイルが同期されていることを意味します。

 git チェックアウトの新しいパーサー
git ステータス

ブランチの状態をチェックして最新であることを確認する

関連:個別の Git ブランチを更新および維持する方法

コミットの変更

コミット メッセージを改善する必要がある場合 (おそらくタイプミスを見つけた場合)、またはコミットに含める必要があるファイルをステージングするのを忘れた場合は、 --amendオプションを使用して問題を修正できます。 注意点として、これはリモート リポジトリにプッシュされたコミットでは使用しないでください。

前回のコミット メッセージでは、「fraze」は「phrase」である必要がありました。 git logを使用すると、これを確認できます。

タイプが強調表示された Git ログ

これを修正するには、次のように--amendオプションを使用します。

 git commit --amend -m "最適化されたフレーズ識別" 

commit --amend オプションを使用してコミット メッセージを修正する

もう一度git logを使用すると、古いコミットが新しいコミットに置き換えられ、コミット メッセージが修正されていることがわかります。

修正されたコミット メッセージを示す Git ログ

ステージするのを忘れたファイルを追加したい場合は、そのファイルをコミットして、以前のコミットの一部として表示することができます。

addを使用してファイルをステージングし、 --amendオプションでコミットします。 --no-editオプションは、新しいコミット メッセージを提供する必要がないことを意味します。 以前のコミット メッセージは保持されます。

 git add jibber.c
 git commit --amend --no-edit 

ファイルを前のコミットにコミットする

コミットからの変更の削除

意図しないファイルを誤ってステージングおよびコミットしてしまった場合は、 resetコマンドを使用してコミットからそのファイルを削除できます。 コミットをステージング領域またはインデックスにリセットします。 次に、ファイルを削除し、残りのファイルを再コミットします。

ステージング領域への最後のコミットをリセットするには、 reset --softコマンドを使用します。 HEAD~ 、「プロジェクト コミット タイムラインの HEAD の後ろにあるコミット」の略で、英語では「最後のコミット」です。

 git reset --soft HEAD~ 

最後のコミットをステージング領域に送り返す

含まれるべきではないファイルを削除するには、 reset --mixedコマンドを使用します。 これにより、これらの変更が作業ディレクトリにリセットされ、変更されたファイルがステージングされていない、コミットされていないファイルとして再作成されます。

 git reset --mixed jibber.c 

Git ステージング領域からのファイルの削除

インデックスに残っている他のファイルをコミットする必要があります。

 git commit -m "実験的な微調整" 

ステージング領域に残っているファイルのコミット

元のコミットにあった他の 2 つのファイルは、再コミットされます。

関連: Git コミットを修正、編集、または元に戻す方法 (Git 履歴の変更)

コミット全体を元に戻す

コミット全体を元に戻すのが最も簡単な場合があります。 作業ディレクトリとリポジトリをコミット前の状態に戻します。

コミットのハッシュ化された参照 ID を使用する必要があります。 これはgit logを使用して見つけることができます:

コミット識別子が強調表示された Git ログ

その参照をコピーして、 revertコマンドで使用します。

 git revert e5bd4560aef8164c6ca9d6d4620b9db7f66aecc8 

コミット ID で識別されるコミットを元に戻す

これによりデフォルトのエディターが開き、元に戻すメッセージを編集できます。 デフォルトのメッセージが入力されています。 これを使用することも、好みに合わせて編集することもできます。

デフォルトのメッセージを強調表示して、元に戻すメッセージを編集する

元に戻すメッセージに問題がなければ、ファイルを保存してエディターを終了します。 nano では、「Ctrl+O」と「Ctrl+X」でこれを行います。

完了した元に戻すアクション、コミット全体を元に戻す

もう一度git logを使用すると、元に戻されたコミットの変更を元に戻す新しいコミットが追加されていることがわかります。

Git スイス アーミー ナイフ

明らかに、 commit最も重要な Git コマンドの 1 つです。 多くのことができるので、学ぶべきことがたくさんあります。 あまり使用されない機能を理解するには、十分な時間を費やしてください。 間違いをすぐに修正する必要がある場合は、事前に準備しておいてよかったと思うでしょう。

関連: Git マージの使用方法