web-dev-qa-db-ja.com

コミットするたびにファイルをgitに追加する必要がありますか?

私はSVNの世界から来たgitが初めてです。これまでのところ、はるかに便利に思えますが、まだ問題を解決しています。

現在、私のワークフローは次のとおりです。

変更する> git add。 > git commit>ログメッセージを入力

私が理解していないのは、コミットする前にすべてのファイルを追加する必要があるように見える理由です。彼らはすでにバージョン管理下にありますか?なぜgit commitはコミットに追加された変更がないことを通知するだけでなく、ファイルを変更したことを指摘するのですか? 「変更されていますが更新されていません:」と表示されます。これは何を意味するのでしょうか??

これが簡単な場合は申し訳ありませんが、私はいくつかの重要なポイントを逃しているように感じます

62
Hamy

これにより、編集によってコミットを分離できます。これらのファイルを1つのコミットで今すぐコミットしたい場合は、次のファイルを2番目のコミットで今すぐコミットする場合は、次のようにします。

git add files_under_one_topic
git commit -m "this is about one thing"

git add files_left_over_to_commit_about_a_completely_different_topic
git commit -m "this is about another thing."
46
Justin L.

Gitは、「ステージング」領域を使用して機能します。この領域では、バンドルするものをコミットとして準備します。そのため、コミットする変更のセット(すべてまたはサブセットなど)を決定し、それらをステージング領域に追加してから、ステージング領域の内容をコミットします。

git statusを呼び出すと、ステージング領域に追加されたもの(つまり、「コミットされる変更」)、gitが追跡しているファイル間で変更されたもの(つまり、変更されたが更新されていない)が表示されます。これまでに追加したことがない新しいファイル(追跡されていないファイルなど)。

変更したものだけをコミットし、新しく作成したファイルは含めない場合は、git commit -a -m "Comment for modified files already under source control."を使用できます

20
Derek Greer

Gitの管理下に置くという意味ではファイルを追加するのではなく、変更リストに追加することになります。 perforceなどの他のSCMもこれを行います。まだコミットする準備が整っていないが、別々のブロックでコミットしたい変更の異なるセットを構築するのに便利です。

git commit -aを実行するだけで、より破壊的な方法でコミットできます。これは、svn commitと同じように、gitが変更について知っているすべてのことをコミットします。

(PS。あなたはsvnの世界から来ているので、もう1つループのために私を投げた別の落とし穴に言及します。あなたがgit diffのとき、それはあなたの現在の状態と現在の状態と最後のコミットの違いではなく、チェンジリストの内容です。すべての変更されたファイル(git diffなど)を追加した直後にgit add -uを実行すると、空の差分が表示されます。コミットすべき違いはありますが!)

12
Ether