Git を使用する場合、私のワークフローでは通常、TortoiseGit を起動して、コミットするファイルを選択します。
これは(私が推測する)git add(?)を実行し、これらの変更をローカルリポジトリにコミットします。
私の質問は、インデックスへのファイルの追加とそれらのコミットを分離する必要があるのはなぜですか?
ファイルを同時にコミットせずに単にインデックスに追加するユースケースはありますか?
Git を使用する場合、私のワークフローでは通常、TortoiseGit を起動して、コミットするファイルを選択します。
これは(私が推測する)git add(?)を実行し、これらの変更をローカルリポジトリにコミットします。
私の質問は、インデックスへのファイルの追加とそれらのコミットを分離する必要があるのはなぜですか?
ファイルを同時にコミットせずに単にインデックスに追加するユースケースはありますか?
インデックスにファイルを追加することをステージングと呼びます。ステージングは、コミットされるものとコミットの外にとどまるものとの間の分離を提供します。別のコミットに適した変更を行った場合は、ステージングせずにそこに残して、インデックスに追加されたものをコミットすることができます。
したがって、本質的には、シンプルで首尾一貫したコミットを準備するのに役立ちます。
インデックス/ステージング領域をかなり使用します。ショッピング カートのようなものと考えることができます。プロジェクトをさまよったり、物を追加したり、カートをいっぱいにしたりできます。必要なものを手に入れたら、コミットします (つまり、それらの変更を購入してストアを離れます)。
これの大きな特徴の 1 つは、パッチの追加です。git add -p
別名git add --patch
では、ファイルから特定のハンクを選択できるため、さまざまなファイルの一部を実際にコミットできます。私はこれを毎日行っていますが、Vim の病原体プラグインを使用しているため、作業コピーとインデックス コピーの間を行ったり来たりして、変更から変更へと移動することが非常に簡単かつ視覚的にできます。きちんとした詳細なコミットの一部だけをカートに追加したら、50 文字以下の賢明で詳細なコミット メッセージでコミットします。これにより、私の歴史は驚くべきものになりました.1時間後に考えを変え、インタラクティブにリベースしてコミットをまとめ、より賢明なフローに並べ替え、時には各コミットで単体テストを機能させることができます.私の歴史のいたるところにクリーンで安全なロールバックポイントがあります。
また、パッチの追加を使用して、ファイルのどの部分が一緒になって意味があるかを判断するのに役立ちました。Vim では,gs
、新しい分割ウィンドウで、現在のファイルのリポジトリの git ステータスを開きます。私は<C-n>
andを使用し<C-p>
て、実際のファイルを含むステータス メッセージの行を飛び回っています。これらの行で使用D
して、一連の分割ウィンドウでそれらを vimdiff し、次に変更から変更へ]c
のトップ ホップを行い、 (diff put) および(diff gets) を使用して変更を現在のバッファーに移動したり、現在のバッファーから移動したりします (これらはいずれかの分割、そして、バッファ間を行き来します)。そのファイル用にステージングしたものが気に入ったら、それを保存します。c[
dp
do
<C-w>h
<C-w>l
:w
<C-w>k
この方法でステージングする新しいファイルを選択する-
か、セット内のファイルをステージングに完全に切り替えたり、ステージングから完全に切り替えたり、cc
実際にコミットしたりして、コミットメッセージを要求します。コミットにコミットする前に、これらの手段を介して行われるすべてのものを確認できます。この時点で、何かを忘れていたり、追加してはいけないものを追加したりして、それを修正することがよくあります。したがって、私のコミットはかなり手付かずです。したい場合は、物事をステージングして の代わりにcommit --amend
使用するか、コミットメッセージを言い換えたい場合に使用できます。cA
cc
ca
要するに、SVN 時代に行っていたように、ファイル全体をコミットすることは、今では非常に粗雑で間違っていると感じています。作業中に懸念事項を 1 つだけ変更するのは非常に困難ですが、インデックスの力を利用してパッチを追加することで、1 つのコミットで一緒に意味のある実際の変更を引き出すことができます。
ステージングは、ファイルのミニコミットに似ています。実際にコミットする前に、ステージング、再ステージング、コミットしたかのように変更を表示し、最新のステージに戻すことさえできます。完全なコミットを数回行うのと同じように、いくつかのミニコミットを行うと、組織化に役立ちます。
本質的には、より細かいレベルの粒度です。
また、コミットする前にローカルで少しいじることができます。これは、事実上、プレイグラウンド ブランチを作成して一連のコミットを実行し、最終的なコミットの前に再びマージすることと同じです。それよりもはるかに軽量です。
SmartGit では、ファイル上でマウスの右ボタンをクリックして、satge を選択できます。