Git Commit: マスター クラス
公開: 2023-02-26
バージョン管理システムの基本的な要件は、さまざまなバージョンのファイルを保存することです。 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 config --global user.name

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

このリポジトリには別のデフォルトのユーザー名があり、グローバル名はまだ他のリポジトリに使用されています。
同様の方法で、 --globalオプションを含めたり省略したりすることで、電子メール アドレスをグローバルに、または単一のリポジトリに設定できます。
git config user.email "[email protected]"
git config --global user.email "[email protected]"
git config user.email
git config --global user.email

これらの設定は構成ファイルに保持されます。 グローバル Git 設定は「~/.gitconfig」に保持され、リポジトリ固有の設定はリポジトリの「.git/config」ファイルに保持されます。
commitコマンドは、動作中にこれらの値を参照して使用します。
commit コマンドの使用
commitコマンドの基本的な使用法は、インデックスと呼ばれるステージング領域にあるファイルを取得し、それらをリポジトリの現在のブランチにコミットとして保存することです。
基本的なコミット
ファイルが変更されたプロジェクトがあります。 addコマンドを使用してファイルをステージングし、コミットします。 変更の目的を簡単に説明できるように、 -m (コミット メッセージ) オプションを使用しています。 このオプションを使用しない場合、コミットが行われるときにコミット メッセージを求めるプロンプトが表示されます。 コマンドラインで追加する方が便利です。
git add jibber.c
git commit -m "更新されたヘルプ テキスト"

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

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

コミットは、以前に提供した名前と電子メール アドレスでタグ付けされており、コミット メッセージも記録されています。
自動ステージング ファイル
多くのファイルをステージングするには、少し時間がかかる場合があります。 別のアプローチは、 addで-A (all) オプションを使用することです。
これにより、現在追跡されていないすべてのファイルとともに、変更されたすべてのファイルが自動的にステージングされます。 追跡されていないファイルのステージングでは、「.gitignore」ファイルの設定が考慮されます。 Git は、含めたくないと言ったファイルをステージングしません。 最後に、作業ディレクトリに存在しなくなったインデックス内のファイルがインデックスから削除されます。
明らかに、 -Aオプションを使用すると、多くのことが一度に発生する可能性があります。 --dry-runオプションを使用すると、実際に変更を実行せずに変更のプレビューを表示できます。
git add -A --dry-run

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

全体で 4 つのファイルが変更されていることがわかります。 そのうちの 2 つは、リストされている新しく作成されたファイルです。
ステージングとコミットを同時に行う
commitコマンドには、小文字の-a (すべて) オプションがあります。 これにより、ファイルのステージングとコミットが 1 ステップで実行されます。

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

それではコマンドを実行してみましょう。
git commit -a --dry-run

ファイルはステージングされ、コミットされます。
別のブランチへのコミット
作業ディレクトリ内のファイルに変更を加えた後、正しいブランチをチェックアウトしていないことに気付いた場合は、現在のブランチに影響を与えずに変更を正しいブランチにコミットする必要があります。
Git には、別のブランチにコミットするためのコマンドがありません。 しかし、Git の器用さを少しだけ活用すれば、この状況を修正することができます。
Git stashコマンドを使用して、変更のコピーを作成します。 次に、正しいブランチをチェックアウトし、stash から変更を適用します。 隠した変更を適用するには、 applyコマンドではなくpopコマンドを使用します。 popコマンドは変更を適用し、stash からも削除します。
リポジトリのnew-parserブランチにいくつかの変更を加えました。 それらは、 classic-parserブランチで作成されているはずです。
git スタッシュ
git checkout クラシックパーサー
git stash ポップ

commitを実行して、このブランチを更新できるようになりました。
git commit -a -m "プリパーサー関数を追加"

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

関連:個別の Git ブランチを更新および維持する方法
コミットの変更
コミット メッセージを改善する必要がある場合 (おそらくタイプミスを見つけた場合)、またはコミットに含める必要があるファイルをステージングするのを忘れた場合は、 --amendオプションを使用して問題を修正できます。 注意点として、これはリモート リポジトリにプッシュされたコミットでは使用しないでください。
前回のコミット メッセージでは、「fraze」は「phrase」である必要がありました。 git logを使用すると、これを確認できます。

これを修正するには、次のように--amendオプションを使用します。
git commit --amend -m "最適化されたフレーズ識別"

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

ステージするのを忘れたファイルを追加したい場合は、そのファイルをコミットして、以前のコミットの一部として表示することができます。
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 commit -m "実験的な微調整"

元のコミットにあった他の 2 つのファイルは、再コミットされます。
関連: Git コミットを修正、編集、または元に戻す方法 (Git 履歴の変更)
コミット全体を元に戻す
コミット全体を元に戻すのが最も簡単な場合があります。 作業ディレクトリとリポジトリをコミット前の状態に戻します。
コミットのハッシュ化された参照 ID を使用する必要があります。 これはgit logを使用して見つけることができます:

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

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

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

もう一度git logを使用すると、元に戻されたコミットの変更を元に戻す新しいコミットが追加されていることがわかります。
Git スイス アーミー ナイフ
明らかに、 commit最も重要な Git コマンドの 1 つです。 多くのことができるので、学ぶべきことがたくさんあります。 あまり使用されない機能を理解するには、十分な時間を費やしてください。 間違いをすぐに修正する必要がある場合は、事前に準備しておいてよかったと思うでしょう。
関連: Git マージの使用方法
