web-dev-qa-db-ja.com

gitの2段階コミットプロセス(ステージング)の利点は何ですか?

私はgitを学習していますが、2つのステップのコミットプロセスがあることに気づきました。

  1. git add <files>
  2. git commit

最初のステップでは、「ステージング領域」または「インデックス」と呼ばれるものにリビジョンを配置します。

私が興味を持っているのは、なぜこの設計決定が行われるのか、そしてその利点は何ですか?

また、gitユーザーとしてこれを行うか、単にgit commit -a

私はこの機能を持たないbzr(Bazaar)から来たので、これを尋ねます。

180
thomasrutter

作業を個別のコミットに分割します。おそらく、ファイルを開いて1行の修正を書き込むことが何度もありましたが、同時に、書式が間違っていた、一部のドキュメントが改善されていた、または他の無関係な修正があった。他の [〜#〜] rcs [〜#〜] sの場合、それを書き留めるか、メモリにコミットし、目的の修正を完了し、コミットしてから、修正に戻る必要がありますその他のもの(または無関係なもので泥棒のコミットを作成する)。 Gitを使用すると、一度にすべてを修正し、git add -iまたはgit-guiを使用して、1行を個別にステージング+コミットできます。

ビルドを壊さないでください。複雑な変更に取り組んでいます。したがって、さまざまなことを試してみてください。いくつかは他のものよりうまく機能し、いくつかは物事を壊します。 Gitを使用すると、変更によって状況が改善されたときにステージングし、変更が機能しなかったときにcheckout(またはさらに調整)を行います。エディターの元に戻す機能に依存する必要はありません。ファイルごとだけでなく、ファイルレベルのミス(コミットされていないファイルの削除など)の代わりに、リポジトリ全体をcheckoutすることができます。または、不適切な変更後に保存して閉じる)の場合、多くの作業が失われることはありません。

83
l0b0

私にとっての利点の1つは、ファイルを段階的に「追加」できることです。コミットする前に、各ファイルを確認します。ファイルを確認したら、追加します。 git statusまたはgit diffを実行すると、gitは変更されてまだ追加されていないファイルのみを表示します。すべてのファイルを確認して追加したら、コミットできます。

ですから、ステージングエリアは非常に役立ちます。

いいえ、git commit -aは使用しません。ただし、git add -uをよく使用します。このようにして、コミットする対象を視覚化できます。

65
David

利点は非常に単純です。いつコミットするかを完全に制御できます。そのためには、git add -pコミットするlinesを制御します。

21
Rein Henrichs

私が気に入っている利点の1つは、変更の一部をコミットできることです。つまり、git add -eを使用します。時々コミットする頻度が低く、git add -eコマンドを使用すると、自分の変更をある程度解くことができます。

1
leed25d