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 マージの使用方法