"git add"と "git commit"の間にステージングエリアがあるのはなぜですか? 私はこのコンセプトを理解していますが、実際にコミットする前にステージング領域にファイルを追加する意味はありません。なぜこのステップをスキップしないのですか?なぜgitにステージングプロセスがありますか?
答えて
一つの主な理由は、あなたがあなたの全体の作業ディレクトリをコミットする必要はありませんです。インデックスの一部をインデックスに移動し、それらのインデックスだけをコミットすることができます。
たとえば、次の2つの異なるものに取り組んでいる、と今、あなたのコードが
//random code
//bug fix
//new feature
あなただけ//bug fix
ラインを上演して、それをコミットし、//new feature
ラインを上演し、それをコミットするよりもできるようになります。
これで2つの異なるコミットができました。後であなたがnew feature
が壊れた何かをコミット実現テストでは、あなたはnew feature
コミット削除することができますが、Dickonリードが彼の答えで述べたように、あなたもgit commit
としての性能を得るバグ修正
を付託する必要はありません、今だけする必要がありますコミットのインデックスにあるものを追加します。すべての変更を見つけるためにツリーを検索する必要はありません。
- git commitは、変更があったかどうかを確認するためにツリー内のすべてのファイルをチェックする必要はありません。大きな時間を節約することができる大きな木の上に。
- いくつかのファイル(またはいくつかのファイル内でいくつかの変更があった場合)をステージングすることにより、コミットしたいものと実行しないものを細かく制御できます。例えば、大きな変更の途中で簡単なバグを発見した場合、他のすべての変更が途切れることなく、1行のバグ修正を素早く実行してコミットできます。
いくつかのファイル内のいくつかの変更について言及すると+1 * – eckes
変更の一部をコミットしたくない場合があります。何かを修正した場合は、修正に関連する変更のみをコミットできます。
これは私の謙虚な意見では純粋なPITAです。明らかに、ほとんどのUIツール(EclipseのEGit、Mac XCode、およびGitHubクライアントを含む私が知っているすべての実際のツール)はこの機能を公開していません。
私は部分コミットという概念を理解しています。ファイルシステム上にあるすべてのものをコミットする必要はありません。しかし、それのための "ステージ"の概念を導入することは過度のことです。ステージングを公開していないgitのために
1. Your file system
2. The staging
3. your local repository
4. the remote upstream
UIのフロントエンド:
は、現在お使いのチェックインを通過するための4つの段階があります。彼らはあなたのすべての変更を表示します。コミットするものと、1回の操作でコミットするものをチェックします。
おそらく、これはインパルメーションのディテールで、UIコンセプトに昇格した可能性があります。代わりに:
commit(X, Y, Z)
あなたが持っている:
add(X), add(Y), add(Z), commit()
を私はDVCSの素晴らしい世界を探索始めていると私はすでにGitの悪魔に魂を売ってきましたが、私はまだ公平な見解を持っています。ステージングエリアの考え方にはいくつかの冗長性がありますが、ステージングエリア全体を無視することができます(githubクライアントを使用している間に行った)。一方、それはより柔軟性を提供するので、時にはあなたを少し助けることができる控えめな冗長性だと言います。
私の頭に浮かんだことは、キャッシュ、ステージングエリア、インデックスという名前が多すぎるということです。明らかに、この設計上の決定は、同様の概念の集合として現れ、その下にいくつかの歴史があります。私は最初の賭けが妥当であることを証明しました - 私はBitkeeperサイトに行き、そこに「ステージング」を見つけました(彼らはオンデマンド分岐のためにそれを使用します)。
今私はBitkeeperがLinuxソースを管理していた時誤用され、いくつかの開発者向けのオンデマンドブランチを作成する代わりに、1人の開発者だけが使用しました。また、このユースケースは有用なものであることが証明されたため、Gitは "インデックス"または "キャッシュ"へのユーザインタフェースを提供することで便利に実装される "ステージング領域"の軽量版を取り入れました。
- 1. なぜF#デバッガがありますか?
- 2. なぜNullPointerExceptionがありますか?
- 3. Gitに "git pull --dry-run"オプションがありますか?
- 4. gitには「相対的な」ツリーがありますか?
- 5. Mac用Gitインストーラ:PATHに/ usr/local/git/binがあるのはなぜですか?
- 6. なぜgit 0.01にgit-addがないのですか?
- 7. Git HEADファイルがリモートリポジトリにあります
- 8. なぜファイル記述子に誤りがありますか?
- 9. Capistrano:chdirにできないか、gitアーカイブがありません
- 10. なぜ私のフッタに大きなギャップがありますか?
- 11. なぜ機能に「静的」な定義がありますか?
- 12. git svnはgitサブツリーと互換性がありますか?
- 13. なぜプレフィックス/ポストフィックス++がありますが、プレフィックス/ポストフィックス+ =はありませんか?
- 14. なぜCFURLCreateStringByAddingPercentEscapesに潜在的にリークがありますか?
- 15. なぜ私はTigでそれらを見ると、いくつかのgitコミットに "refs"がありますか?
- 16. なぜhtml_safeに注意する必要がありますか?
- 17. ヘッダーにPHPのエラーがあります。なぜですか?
- 18. なぜ "インポート"と "インポート*"に違いがありますか?
- 19. なぜこのプログラムにはエラーがありますか?
- 20. なぜこの$ .getJSONリクエストにエラーがありますか?
- 21. なぜajax通信に問題がありますか?
- 22. なぜnewtypeに制限がありますか?
- 23. なぜ以下の出力に違いがありますか?
- 24. なぜこのレイアウトに問題がありますか?
- 25. なぜPythonのevalに長さ制限がありますか?
- 26. なぜ$ _POST ['submit']ここにNULLがありますか?
- 27. なぜcalcsize( "!BHB")とcalcsize( "BHB")に違いがありますか?
- 28. なぜこの乗算に整数オーバーフローがありますか?
- 29. なぜTabNavigatorにギャップがありますか?
- 30. なぜIE7の下に、上記のボーダーボックスがありますか?
+1。 'git add -p'はおそらく私の好きなgitの機能です。 – MatrixFrog
作業URL:https://git.wiki.kernel.org/articles/w/h/a/WhatIsTheIndex_edd2.html – gilligan
@gilliganありがとう、リンクを更新しました。 – Andy