9

以前にMercurialを使用したことがありますが、近い将来Gitに切り替える予定です。

Gitがどのように機能するかを説明する私が見たすべてのチュートリアルは、ファイルが以前に追跡されたかどうかに関係なく、各コミットの前にファイルがステージに追加されることを示しています(「gitadd」)。

Mercurialにも同様の方法で機能するコマンド('hg add')がありますが、私が覚えていることから、'add'を1回だけ実行する必要があります。たとえば、新しいリポジトリの手順は次のようになります。

hg init
hg add .
hg commit "Initial commit"
hg push

このワークフローはGitで可能ですか?不可能な場合、「git add」が繰り返される理由は何ですか?ただ不必要のようです。

4

4 に答える 4

9

gitの2段階のプロセスは非常に強力です。特に、ソースコードを編集するときは、直接関係のないいくつかの変更を並行して行うことがよくあります。

ステージング領域を使用すると、コミットするファイルを選択して、論理的な変更ごとに1つのコミットを作成できます。

すべての変更ファイルを一度にコミットする場合はgit commit -a、ショートカットとして使用できます。
これにより、変更および削除されたすべてのファイルがステージングされ、コミットされます。
注意:追跡されていないファイルは自動的に追加されません。あなたはまだそれを前もってしなければなりません。

于 2013-02-18T16:21:20.993 に答える
6

はい、同じ一般的なワークフローを適用できますが、各コミットに特定のファイルのみまたはファイルの特定の部分のみを追加することにより、「追加」コマンドをより選択的に使用することもできます。これにより、論理的に異なるパッチを異なるコミットに分離しやすくなり、追跡や他のユーザーとの共有が容易になります。

しかし、はい、あなたはただ「gitadd」することができます。そして、すべてがコミットのためにステージング領域に入ります。別の回答で述べたように、「git commit -a」は部分的なショートカットです(新しいファイルは追加されませんが、すべての変更/削除はすでに追跡されているファイルにコミットされます)。「gitstatus」を試して、次のコミットに含まれるものと含まれないものを確認してください。

更新gitaddの補足は「gitresetHEAD」であり、次のコミットのためにステージング領域からファイルを削除することにも注意する必要があります。また、単一のファイル内の編集を複数のコミットに分割する場合は、「-p」フラグを使用してgitaddとgitresetの両方を使用し、ファイルをインタラクティブにステップ実行して、追加/リセットするチャンクを選択します。

于 2013-02-18T16:24:17.017 に答える
1

ここで言及する必要があるもう1つのショートカットは、それほど重いハンマーでgit add .はありませんgit add -u。違いは、前者は明示的に無視されない新しく追加されたファイル(つまり、の出力にリストされているすべての「追跡されていないファイル」git status)をステージングするのに対し、後者はすでに追跡されている変更されたファイルのみをステージングすることです。

于 2013-02-18T16:55:06.523 に答える
1

常にすべての変更されたファイルをコミットしたいわけではないので、コミットするファイルを選択することができます(そしてあなたはすべきです)。作業しているプロジェクトアーチによっては、テストなどのために追加の変更を実行する場合がありますが、必ずしも本番用ではありません。

于 2013-02-18T16:21:35.243 に答える